Skriptthread zum Creation Kit

Dieses Thema im Forum "[Skyrim] Creation Kit" wurde erstellt von Eldarie, 2. Oktober 2011.

  1. Kahmul

    Kahmul Angehöriger

    Soll die Messagebox einfach nur einmalig erscheinen, d.h. egal, wie oft man sich danach wieder hinsetzt? Wenn ja, reicht eine einfach Variable aus, um das zu bewerkstelligen:

    Code:
    Scriptname LIChairMessageScript extends ObjectReference
    
    Boolean used
    Message Property LIChairInfoMsg  Auto
    
    
    Event OnActivate(ObjectReference akActionRef)
    
        if akActionRef == Game.GetPlayer() && !used
            Utility.wait(5)
            LIChairInfoMsg.Show()
            used = true
        endif
    
    EndEvent
     
    Little Ice gefällt das.
  2. Little Ice

    Little Ice Abenteurer

    Danke dir für deine schnelle Antwort.
    Die Message sollte jedes Mal, sobald der Stuhl benutzt wird, erscheinen.
    Trotzdem verarbeite ich erst einmal deinen Vorschlag.

    MfG

    Edit: Gerade eben getestet.
    Skript wird jedoch mit folgenden Fehlermeldungen nicht compiliert:

    ..(3,8):unknown type boolean

    ..(12,8):type mismatch while assigning to a boolean (cast missing or types unrelated)

    MfG
     
    Zuletzt bearbeitet: 23. Februar 2013
  3. Kahmul

    Kahmul Angehöriger

    Sorry, da habe ich Java und Papyrus verwechselt. Muss so lauten:

    Code:
    Scriptname LIChairMessageScript extends ObjectReference
    
    Bool used = false
    Message Property LIChairInfoMsg  Auto
    
    
    Event OnActivate(ObjectReference actionRef)
    
        if(actionRef == Game.GetPlayer())
            used = !used
            if(used)
                Utility.wait(5)
                LIChairInfoMsg.Show()
            endif
        endif
    
    EndEvent
    Habe auch gleich noch eingebaut, dass die MessageBox immer beim Hinsetzen erscheinen soll.
     
    Little Ice gefällt das.
  4. Little Ice

    Little Ice Abenteurer

    Oh Kahmul, herzlichen Dank für deine wieder einmal so schnelle
    kompetente Unterstützung, Mühe und Geduld!!
    Klappt absolut hervorragend und nun so, wie es auch sein sollte.
    Wünsche dir ein angenehmes Wochenende.

    MfG
     
  5. darkfr3ak

    darkfr3ak Reisender

    Hey :)

    Ich suche Hilfe bei einem Script, welches ein "angepasstes" Schmiedefenster öffnet (so wie hier). Es sollen also nur bestimmte Sachen herstellbar sein. Dieses Script soll auf einen ausrüstbaren Gegenstand gelegt werden (in meinem Fall ein Messer bzw. Dolch).

    Vielen Dank im Voraus
     
  6. TheDarkRuler

    TheDarkRuler Hortator

    Das machste nicht über Skripte.
    Erstelle ein Duplikat der Schmiede und sage dann dass die Recipes nur an dieser Schmiede gemacht werden können.
     
    darkfr3ak gefällt das.
  7. darkfr3ak

    darkfr3ak Reisender

    Also kann ich das auch nicht über den Dolch machen? sondern MUSS zwingend eine Schmiede nehmen?
     
  8. Bosmerland

    Bosmerland Abenteurer

    Und wie genau sage ich dann der Schmiede, dass dort nur bestimmte Rezepte ausgeführt werden dürfen? Ich habe schonmal gefragt, aber keine Antwort erhalten...

    Gruß
    Darmok
     
  9. darkfr3ak

    darkfr3ak Reisender

    @Darmok:

    hab was gefunden (hab ich mir aus dieser Mod zusammengefrickelt, hoffe das kommt so hin):

    1. Erstell ein neues Keyword
    2. Erstell deine Recipes (zB. für ne Waffe)
    3. Ordne das Keyword dem Recipe und der Schmiede zu

    Das wäre die Kurzfassung :D

    Und auch für mein Problem hab ich eine befriedigende Antwort gefunden:

    Dieses Script wird an den gewünschten Gegenstand gebunden.

    Code:
    Scriptname CraftingToolScript extends ObjectReference  
    
    WEAPON Property ToolReference Auto
    ObjectReference Property CraftingStationReference Auto
    
    Event OnEquipped(Actor akActor)
        If( akActor == Game.GetPlayer() )
            akActor.EquipItem( ToolReference, True, True )
            Utility.Wait(0.1)
            akActor.UnequipItem( ToolReference, False, True )
            CraftingStationReference.Activate( Game.GetPlayer() )
        EndIf
    EndEvent
    
    Dann wird eine Kopie der Schmiede erstellt und in eine neue Zelle gepackt. Bei dem Gegenstand, auf dem das Script liegt, wird das Script angeklickt, dann auf Properties. Bei CraftingStationReference wählt man die platzierte Schmiede aus, bei ToolReference den Gegenstand auf dem das Script liegt. Dann noch obige Anleitung befolgen, und schon klappt das :)
     
    Zuletzt bearbeitet: 25. Februar 2013
  10. LindayWolf

    LindayWolf Abenteurer

    Servus,

    Ich hätte mal wieder zwei Fragen zu Skripten :)

    Zum einen suche ich ein skript bzw. eine Tipp um einen NPC in einen anderen zu verwandeln bzw ihn mit einem anderen zu ersetzen

    Zum anderen hätte ich gene bei einem meiner Zauber den effekt das das bild so wackelt. weiß wer wie der effect heißt bzw der befehl dazu?

    Danke im Vorraus

    Grüße
    LindayWolf
     
  11. azraelb

    azraelb Abenteurer

    Hi,
    zum Punkt 1 (NPC austauschen):

    habe ich zwar noch nicht probiert und weiß auch nicht genau, welche Actor du wann wo und wie und warum austauschen willst, ich würde aber es aber mit Actor.Enable(), Actor.Disable(), sowie mit PlaceActorAtMe() oder MoveToPackageLocation() + entsprechendes package versuchen.
    (ggf. in einer Scene)
    http://www.creationkit.com/PlaceActorAtMe_-_ObjectReference


    zum Punkt 2:
    Ka. welchen Effekt du meinst, aber sowas kannst du wie folgt selber erstellen:
    Du erstellst einen entsprechenden Imagespacemodifier im CK, der das Bild "wackeln" lässt und rufst dann im Script diesen Imagespace Modifier auf.
    http://www.creationkit.com/Apply_-_ImageSpaceModifier
     
    Zuletzt bearbeitet: 27. Februar 2013
  12. Kahmul

    Kahmul Angehöriger

    1.: Ich würde einfach eine Dummy-Cell mit einem xMarker(Heading) erstellen und die Actors einfach bei Bedarf mit moveTo() hin und wieder zurück bewegen.

    2.: RampRumble() benutze ich dazu.
     
  13. Quad2Core

    Quad2Core Abenteurer

    Die RampRumble() Funktion besteht eigentlich nur aus den beiden Funktionen:
    Game.ShakeCamera()
    Game.ShakeController()
    Welche durch die gegebenen Variablen (power, duration, falloff) definiert werden können. Dies ist für diese Anfrage, jedoch nicht notwendig (so wie ich es jetzt verstanden habe).
    Vorallem, da die RampRumble() Funktion, die Intensität des "Wackelns" jenach der Entfernung abschwächen würde. (was meiner meinung nach, für einen Zauber, wenig Sinn machen würde)
    Desweitern sollten die oben angegebenen Funktionen die Geschwindigkeit des Scriptes erhöhen, da unnöttige Schritte übersprungen werden.

    Code:
    bool FUNCTION rampRumble(float power = 0.5, float duration = 0.25, float falloff = 1600.0)
        ; Function to shake cam/controller based on distance from player
        ; should always be called on the source of the rumble, 
        ; as final intensity is relevant to player
        if power > 1.0 || power <= 0
    ;         debug.traceStack(self + " called rampRumble() but parameter 'power' was invalid.  Must be a non-zero float less than 1.0",1)
            ; throw the warning, but don't return false - value gets clamped anyway
        endif
        float playerDist = game.getplayer().getDistance(self)
        ; ignore if the player is too far away
        if playerDist < falloff
            float intensity = (1 - (playerDist / falloff))
            ; ramp actual intensity down based on parameter value
            intensity = intensity*power        
            if intensity > 1.0
                ; clamp to prevent invalid values
    ;             debug.traceStack(self + " called for too much controller/camera shake.  Clamped to 1.0", 0)
                intensity = 1.0 
            elseif intensity <= 0
                ; clamp to prevent invalid values
    ;             debug.traceStack(self + " called for too little controller/camera shake", 0)
                intensity = 0
                return false
            endif
            game.shakeCamera(game.getPlayer(), intensity)
            game.shakeController(intensity, intensity, duration)
            return true
        else
    ;         debug.traceStack(self + "called for rampedRumble(), but player is too far away", 0)
            return False
        endif
    endFUNCTION
     
    Zuletzt bearbeitet: 27. Februar 2013
    Kahmul gefällt das.
  14. Kahmul

    Kahmul Angehöriger

    Danke, ich sollte mir mal wieder die source codes anschauen, um so etwas zu vermeiden.
     
  15. Quad2Core

    Quad2Core Abenteurer

    Ich bin da jetzt auch nur durch zufall drüber gestolpert, aber habe mir schon gedacht das gerade dich das interessieren könnte :).
     
  16. LindayWolf

    LindayWolf Abenteurer

    Man man echt hammer Leute
    wenns das Forum nicht gäb wär ich verloren :)
    Tausend dank euch allen
     
  17. LindayWolf

    LindayWolf Abenteurer

    So hallo Leute,
    erstmal sorry für den Doppelpost

    Hab noch mal kurz zwei Fragen
    1. Wie kann mann per script (mit equipitem) eine waffe links ausrüsten?
    2. wie kajnn ich per script verbieten das was anderes ausgerüstet wird?


    Dnake schonmal ;)
     
  18. Kahmul

    Kahmul Angehöriger

    Ersteres geht nur mit EquipItemEx() von SKSE. Zweiteres geht aber auch mit EquipItem(), das den Parameter "abPreventRemoval" besitzt.
     
  19. Thalon Mook

    Thalon Mook Abenteurer

    Hi Leute,

    ich hab 2 Probleme.
    1. Ich möchte eine Message Box mit Buttons ausgeben die einen dynamischen Text hat. Also der Text soll vom Script erzeugt werden.
    2. Ich möchte heraus bekommen welche Schule ein Zauber ist. Also Feuerball = Zerstörung

    Zu 1. ich hab es schon hinbekommen das der Name des Chars in der Messagebox ausgegeben wird dies wird mit einem Quest und einem Quest Alias erzeugt. Im Script wird dann mittels ForceRefTo der Alias mit dem Namen des Spielers oder einem anvisierten NPC gefüllt und auch angezeigt.
    Leider funktioniert das Ganze nicht mit einem String sondern nur mit einem Objekt. Ich möchte z.B. alle Zauber die ein Begleiter hat anzeigen lassen und hier kommt 2. diese in die verschiedenen Schulen aufteilen.
    Also es soll eine Messagebox sein die alle Schulen als Buttons anzeigt und wenn ich auf einen klicke dann sollen die Zauber jeweils angezeigt werden.
    Die Messagebox mit den Buttons ist kein Thema ich schaffe es nur nicht die Zauber als Text der Box anzeigen zu lassen.

    Bis denn Thalon
     
  20. Quad2Core

    Quad2Core Abenteurer

    Zu 1:
    Soweit ich weis sind messages nicht scriptbar. Mit der debug.messagebox function könnte dies allerdings funktionieren.
    Edit: Gerade nochmal nach geschaut, es scheint so das es nicht möglich ist buttons mit der debug function zu erstellen. :(

    Zu 2:
    Hier ist ein etwas abgeänderte function, welche ich selber in Lock overhaul genutzt habe:

    Code:
    String Function GetAssociatedSkillFromSpell(Spell akSource) Global
    if (akSource)
        int Index = akSource.GetCostliestEffectIndex()
        MagicEffect mEffect = akSource.GetNthEffectMagicEffect(Index)
        if (mEffect)
            return mEffect.GetAssociatedSkill()
        else
            ;
        endif
    endif    
    EndFunction
    Umgenau zusein ermittelt die Funktion den AssociatedSkill von dem "Teuerstem" Zauber effekt, bedenke das bei Zaubern mit mehreren Effekten (Soweit ich weis sollte das für alle "vanilla" Zauber einwandfrei klappen.)

    Beispiel:
    Code:
    if GetAssociatedSkillFromSpell(MySpell) == "Destruction"
        debug.messagebox("MySpell is a destruction spell!")
    else
        debug.messagebox("MySpell is NOT a destruction spell!")    
    endif

    Ich hoffe es hilft dir weiter :).
     
    Zuletzt bearbeitet: 4. März 2013
    Thalon Mook gefällt das.
  21. Werbung (Nur für Gäste)
  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