Ergebnis 1 bis 20 von 36

Thema: G.E.C.K. Tutorial - Einführung in das Skripten

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Sethx Gast

    Geändert von Sethx (27.05.2009 um 14:59 Uhr)

  2. #2
    Zitat Zitat von Sethx Beitrag anzeigen
    Es geht auch einfacher.
    Mach nen XMarker ( gib ihm nen Namen, z.B.: YXZmarker )
    Setz bei allen 6 Lichtern den XMarker unter "enable Parent" als Ziel
    und hau ein Script auf deinen Schalter oder Terminal.

    Script von meinem Terminal:

    if(YXZmarker.enable)
    YXZmarker.disable
    endif

    if(XYZmarker.disable)
    XYZmarker.enable
    endif

    Vorteil, du kannst soviele Lichter hinzufügen oder entfernen wie du willst ohne jedes mal das Script ändern zu müssen.
    warum die 2 marker?

    kannst du mal dein ganzes script posten?

    Geändert von Shatra (17.03.2009 um 18:29 Uhr)

  3. #3
    Da sind keine 2 Marker...
    Nur 2 abfragen nach dem Marker...

  4. #4
    vielen dank! es klappt. Kann mir jemand jetzt die nötigen Scriptzeilen verraten mit dem ich eine leuchtende Lampe mit einer ausgeschalteten Lampe ersetze?

    und kann ich ein Licht so einstellen, dass es der Tageshelligkeit, sprich Morgen Mittags Abends und Nacht folgt? nachts kein Licht Mittags am hellsten

  5. #5

    Sethx Gast

    Geändert von Sethx (27.05.2009 um 15:00 Uhr)

  6. #6
    ich hab 2 Lichtquellen in meinem Raum, Einmal ein Großes Fenster nach draußen (Sonnenlicht) und 6 Lampen (künstliches Licht). Da die Leute von Vault Tec sehr sparsam mit Energie umgehen, geht ein NPC um 5 Uhr Morgens zum Schalter und macht die 6 Lichter aus, soweit ist das mein Problem. Ich hätte gern, dass mein Sonnenlicht, Ebenfalls den Raum erfüllt, und zwar nicht permanent auch wenn es draußen dunkel ist sondern wie meine WastelandSkyplane,eine rechteckige Fläche die den Wastelandhimmel in Interiorbereichen nachahmt.

    hab die Lösung selber gefunden, es gibt eine Lichquelle die "Sunlight" heisst, bei der kann man unter dem reiter emittance unter Exterior Light einen Himmel auswählen

    Geändert von Shatra (17.03.2009 um 20:34 Uhr)

  7. #7
    Es ist nur ein REF nötig, wenn es eine Kette aus Lichtern wird, die alle gleichzeitig an oder aus gehen sollen. Der XMarker ist elegant, aber nicht unbedingt nötig.

    Ein beliebiges Licht als REFerenz reicht auch, der Rest der Lichterkette wird als Enabled Parent mit dieser Referenzlichtquelle verbunden.

    Das REFerenz-Licht wird dann vom Schalter enabled oder disabled.

    Die Abfrage in den SKRIPTS ist oft nur für die REFerenz, wodurch man diese nicht extra bennen muss, weil man den Schalter mit der Lichtquelle direkt verlinkt.

    Das SKRIPT fragt dann ab, welcher REFERENZ-Punkt mit dem Schalter verbunden (Linked) ist. Der Schalter muss dieses SKRIPT integriert haben.

    Einen ganz einfachen Lichtschalter kann man auch über ein Terminal machen. Die if Abfrage ist eigentlich nur bei einem Schalter nötig, da der nur eine Funktion aktivieren hat und das SKRIPT entscheiden muss, ob das Licht gerade an oder aus ist. Bei einem Terminal kann man beliebige Menü-Punkte machen, zwei reichen aus.

    1. Einfach eine Lichtquelle als z.b. LichtREF benennen.
    2. Die anderen Lichtquellen, die auch ein und aus gehen sollen mit dieser Lichtquelle (LichtREF) über Enabled Parent verbinden.
    3. Ein Terminal als Kopie anlegen.
    4. Einen Punkt - "Licht an" nennen und in die SKRIPT-Spalte eintragen: LichtREF.enable
    5. Einen Punkt - "Licht aus" nennen und in die SKRIPT-Spalte eintragen: LichtREF.disable

    Wenn man jetzt das Terminal im Spiel aktiviert, müssen die beiden MenüPunkte Licht an und Licht aus auftauchen. Wenn man dann den jeweiligen MenüPunkt anklickt, sollte das Licht an oder aus gehen.

    Will man das Licht erst mal aus haben, klickt man bei der Lichtquelle, die man LichtREF benannt hat, noch den Punkt disabled an, wodurch das Licht erst mal deaktiviert ist. Alle weiteren Lichtquellen, die über Enabled Parent mit LichtREF verbunden sind, machen genau das, was diese Lichtquelle macht. Ist sie aus, sind die anderen auch aus. Ist sie an, sind die anderen auch an.

    Lampen kann man auch über den Befehl enable oder disable verschwinden oder auftauchen lassen. Will man zwischen verschiedenen Lampen wechseln, kann man beliebige weitere Punkte anfügen. z.b.

    Licht an:
    LichtREF.enable
    LampenaltREF.disable
    LampenneuREF.enable

    oder

    Licht aus:
    LichtREF.disable
    LampenaltREF.enable
    LampenneuREF.disable

    Es sollte natürlich verschiedene Lampen-Grafiken für an und aus vorhanden sein, die Standardlichtquellen sind glaube ich alle an (so ganz dunkel werden sie nicht wirklich). Die Lampen müssen im Editor übereinander geschoben werden, was im Spiel keine Grafikfehler erzeugt, wenn die LampenneuREF im Item-Menü auf disabled steht (damit nur eine Grafik z.b. LampenaltREF zu sehen ist). Dann kann man noch Sound anfügen mit playsound.xxxxx usw...


    Kleine Hilfe oder Erklärung der üblichen SKRIPTS:

    ref myself
    ref light
    short toggle

    begin onactivate
    if myself == 0
    set myself to this
    endif
    if light == 0
    set light to myself.getlinkedref
    endif

    Hier wird nur abgefragt ob eine Referenz gesetzt ist. Wenn nicht, wird die mit dem Schalter verlinkte Lichtquelle für das SKRIPT als REF benannt. Damit ist der Schalter beliebig einsetzbar, weil man jede Lichtquelle, die man damit steuern will, immer direkt verlinkt.

    Mit so einem Universallskript kann man einen Schalter mit einer Lichtquelle verlinken, den Schalter kopieren und mit der nächsten Lichtquelle verlinken usw... Die Lichtquellen müssen dazu nicht extra benannt werden, der Link zwischen Schalter und Lichtquelle reicht.

    Mit dem Terminal-Beispiel kann man nur die Lichtquelle, die sich LichtREF nennt ein und aus machen. Dafür muss man das Terminal nicht mit der Lichtquelle verlinken, weil das Spiel/SKRIPT den genauen Namen der REF (Lichtquelle) ja kennt.

    Geändert von EMOD (29.03.2009 um 04:35 Uhr)

  8. #8
    Ich müsste mal was zur Script plazierung fragen.
    Also ich selber bin Webdesigner und "andere" skriptsprachen gewöhnt,
    das hier ohne { und } bzw ; verwirrt mich sowieso schon gewaltig.

    Jetzt kann ich das hier am ehesten mit der Aurora sprache in NeverwinterNights vergleichen, welcher ich auch mächtig bin, jedoch wurden da dinge "einfacher" gehandelt. Ein NPC hatte einen Slot für gewisse ereignisse, in dem man ein Skript plazieren kann.
    z.B. einen Slot der hieß "OnDeath", jedes Script was dort liegt, wird ausgeführt, wenn der NPC stirbt.
    Jetzt ist die frage, wo man so ein Skript hier hinlegt.
    Also ich hab ein Haus voller Gegner, wenn der letzte Tot ist, soll ein Skript ziehen. für gewöhnlich würde ich da sowas machen wie:

    Code:
    var DeathCount:Interger;
    var i:Interger;
    
    if (Deathcount == i)
           {
              EndAllActions;
              set SciptABC.Active = 1;
              };
    if (ActionNPCDeathAppear == 1)
           { 
              i++;
              };
    In einer Flash anwendung wüde dieses Script jetzt so lange laufen, bis die bedingung erfüllt ist.
    Frage bleibt, wo lege ich ein solches Script im GECK ab? Also, läuft eine Quest konstant und registriert alle welt-ereignisse? Oder muss ich jedem NPC-Gegner eine "I + 1" skript geben? Wenn ja, wer ist dann auslöser für "I == Voll - weiter gehts".
    Woah.. das verwirrt mich hier.

    In einem Bethesta tutorial Video sah ich, das die manche Activatoren über aufziehbare Boxen geregelt haben. Aber ich kann ja nicht die ganze Welt in eine Box ziehen. (Bzw.. ich kann sicher, aber das kann ja nich der sinn sein ^^).

    Hoffe das mir da wer helfen kann.

    Ps. Ich weiß das mein Script nicht "GECK-Konform" ist, aber die richtige Symantik bzw. Grammatik bring ich schon selbst in erfahrung. Zur not frag ich nochmal.
    Wichtig is erstmal, dass ich nen ansatzpunkt hab, wohin son skript überhaupt gepackt wird.

  9. #9
    Ich bin jetzt kein Profi, aber ich würde es so lösen:

    Weg 1
    Der korrekte Befehl würde

    Begin onDeath

    if irgendwas....

    set xxxx

    endif

    END

    lauten. Das würdest du dann in den NPC als SKRIPT legen, wobei es sich erst aktiviert, wenn der abkratzt.

    Weg 2
    Ein Aktivator, eine Box, der du das Skript zuweist. Dort wäre dann ein

    Begin GameMode

    if deathcount == xx

    set xxxx

    endif

    END

    sinnvoll, das läuft dann immer, auf jeden Fall wenn der Player die Zelle betritt. Eventuell ist dann eine globale Variable nötig, damit der Deathcount sauber zählt, vielleicht reicht auch eine short Variable im Skript.

    Du kannst auch mit GetDistance die Entfernung zum Spieler abfragen, die dann eine if Bedingung abfragt, ob der deathcount schon erreicht ist oder ob eine bestimme Person mit xxx.GetDead == 1 schon hinüber ist oder mit == 0 noch lebt.

    Geändert von EMOD (03.04.2009 um 05:26 Uhr)

Berechtigungen

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