Skriptthread zum Creation Kit

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
 
  • Like
Reaktionen: Little Ice
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:
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.
 
  • Like
Reaktionen: Little Ice
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
 
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
 
@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:
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
 
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?

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:

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:
  • Like
Reaktionen: Kahmul
Ich bin da jetzt auch nur durch zufall drüber gestolpert, aber habe mir schon gedacht das gerade dich das interessieren könnte :).
 
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 ;)
 
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
 
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:
  • Like
Reaktionen: Thalon Mook