Ergebnis 1 bis 20 von 45

Thema: Navmesh bei Abwasserkanälen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Meine Version:


    scn NACHTLICHTSCRIPT

    ref NachtlichtVAR

    Begin GameMode

    if NachtlichtVAR == 0
    set NachtlichtVAR to GetLinkedREF
    endif

    if gameHour >= 5.0 && gameHour <= 21.0
    NachtlichtVAR.disable
    else
    NachtlichtVAR.enable
    endif

    End

    Das Skript in einen Aktivator packen und daraus eine Collision Box machen. Die verlinkst du mit einer Lichtquelle. Die Lichtquelle am besten im Objekt-Fenster disablen und persist machen. Alle anderen Lichtquellen, die ebenfalls ausgehen sollen, mit enable parent an die erste koppeln.

    Geändert von EMOD (06.05.2009 um 01:44 Uhr)

  2. #2
    Danke dir, hab das Script schon vor einigen Tagen zum Laufen gebracht, ich wusste dann nur nicht wo ich es hinpacken soll...

    Mein Script sieht jetzt so aus:

    Code:
    scn TheManiacModPoolLights
    
    short start
    short doonce
    
    Begin OnTriggerEnter Player
    
    if ( start == 0 )
        set start to 1
    endif
    
    end
    
    Begin GameMode
    
    if ( start == 1 )
        if ( GameHour > 19 || GameHour < 6 )
            if ( doonce == 0 )
                TMMPoolLights.enable
                set doonce to 1
            endif
        else
            if ( doonce == 1 )
                TMMPoolLights.disable
                set doonce to 0
            endif
        endif
    endif
    
    end
    
    Begin OnTriggerLeave Player
    
    if ( start > 0 )
        set start to 0
    endif
    
    end

    Hab den Lichtern einen XMarker als Enable Parent zugewiesen, imo mit die einfachste Art *g*

    Edit: Achja bei mir flackern die Lichter, wenn der enable Teil direkt nach der Gamehourbedingung kommt...

    Deshalb hab ich bei mir ein doonce benutzt...könnte man den Teil eigentlich auch so schreiben:
    Code:
    if (doonce == 0 ) && (GameHour > 19 || Gamehour < 6 )
    .....
    else
    .....
    endif
    Dann könnte ich mir nämlich zwei ifs und endifs sparen

    Geändert von TheManiac (06.05.2009 um 12:39 Uhr)

  3. #3
    Du denkst noch zu kompliziert.

    1. Die Trigger kannst du dir sparen, wenn das Licht automatisch an und aus gehen soll. Wenn du damit bezweckst, das die Abfragen erst gestartet werden, wenn der Player kommt, macht das wenig sinn, da GameMode automatisch läuft.

    Wenn du damit einen automatischen Schalter bezweckst, der sich durch den Player aktivieren soll, dann ist es okay. Wobei du aber dann wieder keinen GameMode brauchts, weil du die GameHour mit dem Trigger und einem if abfragen kannst.

    z.b.

    Beginn onTriggerEnter player

    if GameHour xxx

    Licht enable

    End

    Beginn onTriggerLeave player

    Licht disable

    End

    Geändert von EMOD (07.05.2009 um 19:03 Uhr)

  4. #4
    Soweit ich weiß gibts auch bei GameHour keine Grenzen nach 24 kommt also 25 26 27 usw. aber mit dem oder <6 werden auch alle Zahlen unter 6 relevant, also 6 5 4 3 2 1 somit hab ich mit dem oder alles abgedeckt:

    Das Spiel liest die Zahl 22 als Uhrzeit aus, GameHour > 20 trifft zu, das Spiel liest 1 als Uhrzeit aus GameHour > 20 trifft nicht mehr zu, aber dafür GameHour < 6

    Wenn du es in die Richtung mit einem und versuchen würdest, dann würde es nicht funktionieren, hatte es darüber auch schon mit jemandem im Bethesda Forum, der es so gemacht hat:
    20, 21, 22, 23 && 0, 1, 2, 3, 4, 5, 6 würde kein Problem darstellen, wenn das Spiel wüsste wie eine Uhr funktioniert, aber da es das nicht weiß und auch GameHour nur als eine Zahl ausgelesen wird, wäre diese Abfrage

    if GameHour > 20 && GemHour < 6

    permanent falsch, das würde nämlich bedeuten, dass die Uhrzeit größer als 20 und kleiner als 6 sein muss und das geht nicht...
    Die Zeitabfrage aus deinem Script funktioniert natürlich wunderbar, du hast das oder vermieden, indem du einfach das Gegenereignis definiert hast

    Das mit dem kompliziert Denken liegt daran, dass ich es noch nie mit Triggern zu tun hatte...dazu hab ich auch noch eine Frage:
    Wenn ich jetzt die Trigger Blöcke weglasse, läuft das Script dann unter Gamemode permanent oder nur wenn der Spieler im Trigger steht?
    Ich möchte den Mod nämlich nur so viel wie nötig zu müllen, sonst hätte ich ja von Anfang an ein Quest zum Aktivieren benutzt

  5. #5

    Sethx Gast

    Geändert von Sethx (27.05.2009 um 13:51 Uhr)

  6. #6
    Genau das meinte ich, die Triggerblöcke sind unnötig, weil der GameMode Block sowieso immer läuft.

    @SethX
    Das ist wie mit dem Kühlschranklicht, die Skripte laufen zu 99% nicht, wenn der Player außerhalb der Reichweite/Innenzelle ist. Ich weis nur nicht ob die Zellengrenzen bestimmen oder ob es eine maximale Reichweite gibt.

    Man kann das leicht testen, koppel mit dem Lichtschalter einen Placeatme Monster 1, nach jedem Tag, der vergangen ist, müsste dann ein Monster an der Stelle stehen, wenn die Zeitschaltuhr mitläuft.

    Nach meiner Erfahrung passiert das nur, wenn sich der Player in Reichweite/Zelle befindet. Ich habe solche Abfragen sicherheitshalber immer mit if GetDistance player <= XXXX gekoppelt, da der Beginn GameMode eh mitläuft.

    @Trigger
    Der Trigger oder (+Enter) aktiviert sich nur, wenn man die Box berührt oder (+Leave) sie verlässt. Wenn man da einen GameMode reinpackt, ist es ein aktiver Aktivator für Skripte + ein Trigger in der Größe der Box. Um zu vermeiden, dass der Trigger von anderen ausgelöst wird (herumlaufenden NPCs):

    Begin onTrigger player

    Begin onTrigger CalistaREF

    Trigger sind auch nur 1x Schalter, weshalb man für eine permanente if Abfrage dann zusätzlich den GameMode braucht. Wenn also irgend ein Trigger Event nicht gehen sollte, muss man die if Abfrage vielleicht nur in einen GameMode setzen. Das ist z.b. beim Lichtschalter so, wäre es nur ein if im Trigger Block, dann würde sich das Licht nur bei Berührung der Trigger Box zu der Uhrzeit Abfrage ein- oder ausschalten.

    Kommt immer darauf an was man macht, manche Abfragen gehen nur im GameMode, bei anderen ist es egal. GECK-Wiki hilft manchmal, da man oft tricksen muss

    @Läuft das Skript
    Das war ja auch der Konsens bei der normalen MM Variante, ich bin davon überzeugt, das die markfordelete Skripte nach Zellen-Reset/Uhrzeit nicht so gehen, wie sie sollten. Im Grunde müssen die Leichen der Monster liegen bleiben, solange der Zell-Reset nicht gemacht wurde oder der Player außerhalb der Reichweite ist.

    Beispiel:
    Du killst Zombies in der Metro und gehst nach DC. Zwar steht im Skript der Zombies, lösche dich beim Zell-Reset, da der Player aber nicht in Reichweite ist, kann er das eigentlich nicht ausführen. Betritts du die Metro nach dem Zell-Reset wieder, stellt sich die Frage: Hat er sich den Zeitpunkt für den Zell-Reset aller Leichen gemerkt, also den Wert für alle toten Zombis abgespeichert, dann löscht er sie sofort, weil der Player wieder in Reichweite/Zelle ist. Hat er das nicht gespeichert, laufen alle Skripte wieder an, und warten auf den Zell-Reset. Egal wie man es dreht, je mehr Leichen, umso mehr Müll.

    Deshalb meine Abfrage auf Entfernung:

    scn zMMMzSpawnRemoval

    Begin GameMode

    if GetDead == 1 && GetDistance Player > 11000 && GetInSameCell Player == 0
    markfordelete
    endif

    End

    Beim GetInSameCell Player == 0 müsste sofort alles verschwinden. Ist dann wieder wie beim Kühlschranklicht, hat er es tatsächlich noch ausgeführt, wenn du die Innenzelle verlässt oder das Skript schon auf Eis gelegt, in der Sekunde wo du die Zelle verlassen hast

    Diese GetInSameCell == 0 würde umgekehrt immer als GetInSameCell CalistaREF == 0 funktionieren, weil viele Events eh nur wichtig sind, wenn der Player anwesend ist. Aus dem Gefühl würde ich sagen, die GameMode Abfrage ist so schnell, das er die if noch ausführt, bevor du ganz aus der Zelle/Reichweite verschwinden kannst.

    Geändert von EMOD (07.05.2009 um 19:01 Uhr)

  7. #7
    Ok danke, dann kann ich also das OnTrigerEnter Player und OnTriggerLeave Player weglassen...so wie ich euch jetzt verstanden habe, brauche ich die OnTrigger Blöcke nur bei Dingen wie einen Quest, der beim betreten eines Raumes startet oder automatisch schließenden/öffnenden Türen?

    Achja wegen der Uhrzeit, du kannst ja mal probieren ein && zwischen meine Abfrage zu setzten Und else ist ja so wie ich das bis jetzt bei Scripts gesehen habe nicht das genaue Gegenteil der oben definierten if-Bedingung, auf Englisch heißt else einfach nur andernfalls und das heißt es soweit ich weiß bei Scripts auch.

    Ich prophezeie dir auf jeden Fall, dass mein Script mit einem && nicht funktionieren würde und das liegt daran, dass nach 23 nicht 0 sondern 24 kommt und nach 24 nicht 1 sondern 25

  8. #8
    Trigger immer wenn du willst, das sich Ereignis bei betreten der Box aktivieren soll. Es ist wie eine Lichtschranke oder ein Sensorfeld, dass irgend etwas auslöst, wenn du durchgehst.

    Der Trigger muss so gesetzt sein, dass er ausgelösst wird, wenn jemand/etwas ... durchgeht. Man kann ihn ja beliebig ziehen, vergrößern und in die Höhe strecken.

    Wenn du die Box nur als Aktivator im GameMode benutzt (Zeitschalter), dann kannst du sie ganz klein machen und sie auch außerhalb der Gänge/Wände platzieren.

    Mit der Uhrzeit hast du recht, weil es bei mir am Anfang nicht funktioniert hat. Deshalb habe ich ihn durch probieren bestimmt zufällig mit 5 bis 21 Uhr disabled für && kompatibel gemacht.

    Mein erster Versuch war sicher auch 21 bis 6 Uhr anmachen, was dann durch mein && nicht ging, weil ich über ein || zwar nachdachte, aber nicht auf das 21 22 23 24 25 kam.

    Aus dem Kopf könnte ich viele Sachen eh nicht machen, ich muss mir die Skripte erst nochmal ankucken, bevor ich da aktiv was neues erstellen kann Leider kann man man nicht 24h/365 Tage modden. Für E-MOD hatte ich 3 Monate Vollzeit ^^.

    Geändert von EMOD (07.05.2009 um 16:24 Uhr)

  9. #9
    Ok thx dann werde ich jetzt mal ein paar automazische Lichter und Türen machen

    Edit: Achja ist die Zeit in dem IdleMarker edit Window in echten Sekunden, Spielsekunden, echten Minuten, oder Spielminuten angegeben?
    Muss ich Idlemarker eigentlich als ref mit nem Objekt setzten, wenn ich will, dass die KI mit diesem interagiert?

    Geändert von TheManiac (07.05.2009 um 16:15 Uhr)

  10. #10
    Die Zeit sollten Sekunden sein, ich gehe immer davon aus.

    Was willst du damit genau machen, die XMarkerHead gehen als Patrol mit warten recht sicher, bei anderen Markern musste testen, es kann sein das es dann nur per AI Package sauber läuft.

    Wenn du die Marker direkt verlinkst, dann ist Persistent eigentlich nicht nötig, nur wenn es ein REF für AI Packages oder Skripte sein soll, dann meckert er aber sofort wenn es vergessen wurde oder dein Fadenkreuz bleibt im GECK rot.

    @Automatische Türen
    In Türen kannst du direkt ein Skript ablegen, ich habe welche mit Distanzabfrage gemacht. Wenn du sie per Trigger machst, dann brauchste ne BOX mit Link openstate und switch. Da gibt es auf der GECK-Wiki irgendwo unter hilfreiche Skripte schon eine Vorlage.

  11. #11

    Sethx Gast

    Geändert von Sethx (27.05.2009 um 13:51 Uhr)

  12. #12
    Zitat Zitat von EMOD Beitrag anzeigen
    Die Zeit sollten Sekunden sein, ich gehe immer davon aus.

    Was willst du damit genau machen, die XMarkerHead gehen als Patrol mit warten recht sicher, bei anderen Markern musste testen, es kann sein das es dann nur per AI Package sauber läuft.

    Wenn du die Marker direkt verlinkst, dann ist Persistent eigentlich nicht nötig, nur wenn es ein REF für AI Packages oder Skripte sein soll, dann meckert er aber sofort wenn es vergessen wurde oder dein Fadenkreuz bleibt im GECK rot.

    @Automatische Türen
    In Türen kannst du direkt ein Skript ablegen, ich habe welche mit Distanzabfrage gemacht. Wenn du sie per Trigger machst, dann brauchste ne BOX mit Link openstate und switch. Da gibt es auf der GECK-Wiki irgendwo unter hilfreiche Skripte schon eine Vorlage.
    Nö ich bin grad dabei mein Haus mit den Idlemarkers vollzustopfen, obwohl eigentlich bin ich ziemlich anhaltslos, also kann von vollstopfen noch nicht die Rede sein

    Ich hab in meinem Poolbereich z.B. Kissen platziert und hätte gerne, dass die Companions die im Gebäude warten sich dort immer mal wieder hinsetzen. Hab mit einigen die meinen Mod gezogen haben auch schon geredet und die haben gesagt, dass die Follower sich nichtmal ins Bett legen oder an die Bar setzen, muss ich dafür etwa auch noch Idlemarkers setzen???

    Und danke euch beiden wegen den automatischen Türen

  13. #13
    Haben sie ein AI Package DefaultSandbox ? Und das Haus eine Navmesh ?

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •