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
    Du kannst auch 2 Queststages machen und bei deinem Percentwert eben auf diese Queststage setzen die da sein soll, und bei dieser Queststage soll der Actor den Player mit dem Topic aktivieren. Hoffe du verstehst das xD

  2. #2
    Zitat Zitat von SirTroy Beitrag anzeigen
    Du kannst auch 2 Queststages machen und bei deinem Percentwert eben auf diese Queststage setzen die da sein soll, und bei dieser Queststage soll der Actor den Player mit dem Topic aktivieren. Hoffe du verstehst das xD
    Ähhhhh.... danke,

    könnte ich ein Beispiel bekommen?

    mfg

  3. #3
    uff....
    Pass auf
    Code:
    If Percentwert == 48
    set Queststage to 50
    endif
    Bei deinem NPC machst du nun bei der AI ein Find Packages auf den Player.
    Die Condition ist GetStage QuestID == 50.
    Und bei der Quest machst du jetz dein Topic und als Condition beim Topic auch GetStage QuestID 50 und natürlich GetIsID NpcREF.

    Und eben dasselbe nochmal mit Percentwert == 60 oda so.

  4. #4

    Example Script von GECK WIKI

    ScriptName LightSwitchScript

    ref light ;der name "light" hat der eine bedeutung oder ist er frei erfunden?

    Begin OnActivate
    if light == 0 ;wenn die Variable light 0 ist? was ist damit gemeint, unten steht doch schon enable oder disable, ist das der Anfangswert? also wenn das Licht = 0? dann ensteht erst der Bezug zu dem Lichteffekt?
    set light to GetLinkedRef
    endif

    if light.GetDisabled ;also, wenn das light ausgeschaltet wird (ist "light" immer noch die Variable?), dann wird das "light" eingeschaltet, sonst wird es ausgeschaltet?
    light.Enable
    else
    light.Disable
    endif
    Activate
    End

    Geändert von Shatra (16.03.2009 um 16:47 Uhr)

  5. #5
    1.Er ist frei erfunden...

    2.Eine Variable oder Ref hat immer den Anfangswert 0

    3.Nein wenn das Licht beim Aktivieren ausgeschaltet ist, wird es aktiviert, ansonsten wird das licht dann ausgeschaltet, also Disabled.

  6. #6
    es Funktioniert nicht, Die Objekte sind Lichter keine Lampen

    ScriptName LightSwitchVTCT01
    ref light

    Begin OnActivate
    if light == 0
    set light to [VTCTMaHaLi01]GetLinkedRef
    set light to [VTCTMaHaLi02]GetLinkedRef
    set light to [VTCTMaHaLi03]GetLinkedRef
    set light to [VTCTMaHaLi04]GetLinkedRef
    set light to [VTCTMaHaLi05]GetLinkedRef
    set light to [VTCTMaHaLi06]GetLinkedRef
    endif

    if light.GetDisabled
    light.Enable
    else
    light.Disable
    endif
    Activate
    End

    Geändert von Shatra (16.03.2009 um 18:51 Uhr)

  7. #7
    Und was genau möchtest du jetzt? o_O
    Und btw:
    Du kannst einer Ref nicht mehr als 1 Funktion oder ähnliches zuweisen.
    Du müsstest also 6 Refs machen in deinem fall.

  8. #8
    Ich möchte mit einem Schalter/Activator 6 Lichter in einem Raum deaktivieren.
    Nachdem ich die Klammern vor und hinter den Referencen zu den Lichtern gelöscht und eben einen Punkt zwischen reference und getlinkedref gesetzt hab passiert jetzt auch was. Mein Schalter verschwindet nachdem ich ihn aktiviere

    Begin OnActivate
    if light == 0
    set light to VTCTMaHaLi01.GetLinkedRef
    endif

    if light.GetDisabled
    light.Enable
    else
    light.Disable
    endif
    Activate
    End


    Begin OnActivate
    if light == 0
    set light to VTCTMaHaLi02.GetLinkedRef
    endif

    if light.GetDisabled
    light.Enable
    else
    light.Disable
    endif
    Activate
    End

    So in etwa?

    Geändert von Shatra (16.03.2009 um 19:27 Uhr)

  9. #9

    Sethx Gast

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

  10. #10
    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 17:29 Uhr)

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

  12. #12
    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

  13. #13
    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.

  14. #14
    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 04:26 Uhr)

  15. #15
    also das hier:

    Code:
    scn SilberModBossTeleportScript
    
    Begin OnDeath
    
    if SilberModTestPupped02.GetDead == 1
    	SilberModGuardian01.MoveTo SilberModSpawnPoint01
    else
    endif
    
    End
    Funktioniert irgendwie nicht. Guardian steht schon auf dem XMarker bevor die Testpuppe tot is. also genaugenommen steht der schon da, wenn ich den raum betrete.

    EDIT: Oh, der stand schon da, weil der noch keinen Navmesh in seiner Kammer hatte. Jetzt hat der einen und ehm ja.. jetzt bleibt der auch bequem in seiner Kammer und kommt da garnicht mehr raus.

    in der Geck Referenz hab ich keine Funktion gefunden die einen NPC/Monster Spawnen lässt. Von daher steht der Guardian in einer kleinen kammer die nicht erreicht werden kann vom Spieler. Gibts da ne sinnigere lösung oder muss ich wirklich eine Kammer für 1000 NPC´s schaffen die dann alle irgendwann mal irgentwo auftauchen sollen wenn das Skript das befiehlt.

    Ich dachte da an sowas wie "

    Code:
    ref SpawningPupped
    Set SpawniingPupped to SilberModEinTollerGegner
    If XXX.GetDead == 1
       AppearReferenceFromLibraryToLocation.SpawningPupped
      endif
    sprich das der sich was aus den objekten zieht die es gibt in der Mod. Auch wen diese noch nicht Manuell irgendwo inGame plaziert sind.

    Geändert von SilberWolf (04.04.2009 um 00:27 Uhr)

  16. #16
    In deinem Fall geht es noch einfacher:

    scn SilberModBossTeleportScript

    Begin OnDeath
    SilberModGuardian01.enable
    END

    Du musst dann noch den Guardian platzieren, wo er auftauchen soll und ihn in seinem Menü/Edit auf disable stellen.

    Auch wenn du moveto machst, wenn der NPC bis dahin nichts machen soll und nicht gesehen wird, stell ihn besser auf disable und enable ihn immer über das Skript.

    Fehlerquellen könnten bei deinem bisherigen Versuch sein:
    Die ID SilberModTestPupped02 ist nicht vergeben oder wird nicht richtig von getdead erkannt, das sollte das Skript (wenn du GECK verwendest) eigentlich anmeckern.
    Guardian hat kein AI-Package.
    Ein AI-Package verweist auf den XMarker oder die Zelle.
    Begin onDeath Player mal probieren.
    NPC ist enabled, steht an seinem (Spawn)-XMarker rum, sobald der Player den Raum betritt.

    Geändert von EMOD (18.09.2009 um 23:36 Uhr)

  17. #17
    Uii, noch ein Nachtfalke
    Aber cool, deine Idee mit dem Enable/Disable funktionierte.
    Für den Boss reicht das erst einmal.

    Fraglich bleibt wie ich das dann später mit der Polizei mache.
    Also kurzeinführung: Es ist absolut lächerlich, das ich eine Haarklammer klaue und jeder direkt meinen Tod wünscht als vergeltung. Wer in Rivet City in der Kirchmülltonne wühlt, der ist des Todes. Das ist typisch Bethesta, aber mich nervt sowas, von daher soll es eine Art "Polizei" geben.

    NPC bemerkt Diebstahl -> Rennt zu den Cops -> Cops versuchen Player zu stellen -> Player wird verhaftet.

    Ich dachte mir das ich das mit MoveTo regeln kann, so das der Polizist stets die "Fährte" des Spielers aufnimmt und erst nach einem bestimmten Radius wieder ins Revier spaziert. Aber das scheint ja damit so nicht umsetzbar zu sein.

  18. #18
    Würde ich so umsetzen. Cops disablen oder AI-Package rausnehmen. Wenn der NPC die Cops alamiert, rennt der in die Zelle/Polizeistation, dort werden die Cops durch einen Aktivator enabled oder bekommen ein entsprechendes AI-Package. Dann rennen die von der Polizeistation los und suchen den Dieb.

    Das könnte man dann mit ner Variablen lösen, die eventuell dann noch eine Wahrscheinlichkeit bekommt, ob sie den Dieb erkennen und die Beschreibung korrekt war. Damit sind sie keine gnadenlosen Bluthunde oder Kopfgeldjäger. Dann noch einen Timer rein, das sie ihre Suche irgendwann abbrechen, Variable und/oder AI-Package wieder löschen.

    Bethesda wieder, ich erinnere mich noch an Morrowind, man klaut Klamotten und Ringe, wertet die mit Zauber auf und wird 2 Jahre später beim Diebstahl von nem Stück Brot erwischt. Was machen die Wachen, hey du hast gestohlene Ware und nehmen dir alles ab. Als wenn sie das sehen könnten, das 2 Jahre alte Sachen aus einer anderen Stadt ebenfalls gestohlen sind.

Berechtigungen

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