Skriptthread zum Creation Kit

Du musst einfach mit elseif die einzelnen Stadien abfragen und dann die gewünschten Dinge ausführen lassen.

Code:
if(w == <Status1>)
  ; Mache dies
elseif(w == <Status2>)
  ; Mache jenes
elseif(w == <Status3>)
  ; Mache, was immer Du willst
else
   ; Wenn nichts davon zutrifft, mache das
endif
 
  • Like
Reaktionen: MaGlas
Hi,

kann mir wer sagen was an diesem Script falsch ist:

int mana
int leben
int schaden
int lebenv
int lebenn

lebenv = GetActorValue("Health")

Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
lebenj = GetActorValue("Health")
schaden = lebenv - lebenn
mana = GetActorValue("Magicka")

if mana => 30
mana = mana - schaden
SetActorValue("Magicka",mana)
lebenj = lebenj + schaden

elseif mana =< 30
leben = GetActorValue("Health")
leben = leben - schaden
SetActorValue("Health",leben)
endif
endEvent



Danke
 
Bekommst du einen Fehler angezeigt oder passiert nicht das erwünschte?
Bei letzterem wäre es wichtig zu wissen, was genau das Ziel ist...

ersetz mal "=>" durch ">=" und "=<" durch "<=".
Abgesehen davon solltest du bei einem der beiden das "=" weglassen, oder stat "elseif" einfach "else" nehmen.

// Bitte schlagt mich nicht, wenn ich gerade völligen Blödsinn geschrieben habe. Beruht alles auf Oblivion-Kenntnissen...
 
  • Like
Reaktionen: adinsx
Danke schonmal

Das genaue Ziel ist es, wenn man Schaden abbekommt, dass dieser von den Magickapunkten abgezogen und nicht von den Lebenspunkten und man erst Leben verliert wenn die Magicka unter 30gefallen sind
Die idee hab von einer mod-idee hier im Forum und da dachte ich mir, dass ich daran ein bischen üben könnte, da meine Scripting-Kenntnisse etwa 4 Tage alt sind.
 
Die Variable "lebenj", die du im Script verwendest hast du oben nirgends deklariert, infolge dessen müsste hier der compiler schon mal schreien!
Abgesehen davon: Auf welches "Objekt/Actor/Quest/etc." legst du dieses Script überhaupt?

Guck dir mal das Script vom "Stab des Magnus" an. Der macht doch im Prinzip sowas ähnliches...
 
Zuletzt bearbeitet:
  • Like
Reaktionen: adinsx
Im Moment verstehe ich die Welt nicht mehr, nachdem ich gerade in der wohltuenden Phase war, wo ich das Gefühl kriegte, Papyrus beherrschen und alles hinkriegen zu können.

Habe zuerst ein Objekt-Script auf ein Quest-Script zugreifen lassen und das ging.
Dann brauchte ich noch eine Quest, und ging nach dem selben Schema vor und es ist, wie wenn ich nur Variabeln zurück kriegte, die nie initialisiert wären.

Beispiel 1: klappt alles.
Code:
Scriptname DRWEffectsControllerScript extEnds ObjectReference
DRWEffectsQuestScript Property EffectQuest  Auto
Function X()
    int selected = DRWEffectsMsgSaturation.Show(EffectQuest.EffectSetting(effectId) + 1)
EndFunction

Scriptname DRWEffectsQuestScript extends Quest Conditional
int Function EffectSetting(int effectId)
    return fxTypes[effectId]
EndFunction

Script 2: Klappt nicht.
Code:
Scriptname DRWEffectsControllerScript extEnds ObjectReference
DRWEffectsQuestGoreScript Property EffectGoreQuest  Auto

Function X()
    int selected = DRWEffectsMsgGore.Show(EffectGoreQuest.GetGoreType() + 1, EffectGoreQuest.GetTreshold() * 100)
EndFunction

EffectGoreQuest.SetTreshold(EffectGoreQuest.GetTreshold() - 0.05)

Scriptname DRWEffectsQuestGoreScript extends Quest
float goreTreshold = 0.5
float Function GetTreshold()
    return goreTreshold
EndFunction

Im Beispiel 2 geben sämtliche Rückgabewerte 0 oder 0.00000 zurück, was ja bei goreTreshold, das mit 0.5 initialisiert wird, gar nicht möglich sein kann. Ich schaffe es auch nicht, den Wert von Treshold updaten zu lassen.
Und wenn die Variable goreTreshold auf der Quest wirklich 0.0000 hätte und goreEnabled 0 wäre, dann wären die Blut-Effekte gar nicht sichtbar, aber das sind sie, das Script läuft völlig problemlos.
Was kann es sonst für einen Grund geben, das sowas passiert?
 
Zuletzt bearbeitet:
Hey Kahmul
Glaubst du es stimmt so alles wie ich es eingefügt habe? Und muss ich es dann auf die Objecte ziehen oder wird das irgendwie über Quests gemacht?
ScriptName ShackDropScript extends Quest

ObjectReference Property ShackDrop1
ObjectReference Property ShackDrop2
ObjectReference Property ShackDrop3
ObjectReference Property ShackDrop4
ObjectReference Property ShackDrop5
ObjectReference Property ShackDrop6
ObjectReference Property ShackDrop7
ObjectReference Property ShackDrop8
ObjectReference Property ShackDrop9
ObjectReference Property ShackDrop10
ObjectReference Property ShackDrop11

Event OnInit()

registerforupdate(1)
gotostate("s")

EndEvent

State s
Event OnUpdate()
weather w = weather.getcurrentweather()
if(w == 10a7a6)
ShackDrop1.enable(true)
ShackDrop2.enable(true)
ShackDrop3.enable(true)
ShackDrop4.enable(true)
ShackDrop5.enable(true)
ShackDrop6.enable(true)
ShackDrop7.enable(true)
ShackDrop8.enable(true)
ShackDrop9.enable(true)
ShackDrop10.enable(true)
ShackDrop11.enable(true)
elseif(w == 10a242)
ShackDrop1.enable(true)
ShackDrop2.enable(true)
ShackDrop3.enable(true)
ShackDrop4.enable(true)
ShackDrop5.enable(true)
ShackDrop6.enable(true)
ShackDrop7.enable(true)
ShackDrop8.enable(true)
ShackDrop9.enable(true)
ShackDrop10.enable(true)
ShackDrop11.enable(true)
elseif(w == 10a241)
ShackDrop1.enable(true)
ShackDrop2.enable(true)
ShackDrop3.enable(true)
ShackDrop4.enable(true)
ShackDrop5.enable(true)
ShackDrop6.enable(true)
ShackDrop7.enable(true)
ShackDrop8.enable(true)
ShackDrop9.enable(true)
ShackDrop10.enable(true)
ShackDrop11.enable(true)
elseif(w == 10a23d)
ShackDrop1.enable(true)
ShackDrop2.enable(true)
ShackDrop3.enable(true)
ShackDrop4.enable(true)
ShackDrop5.enable(true)
ShackDrop6.enable(true)
ShackDrop7.enable(true)
ShackDrop8.enable(true)
ShackDrop9.enable(true)
ShackDrop10.enable(true)
ShackDrop11.enable(true)
elseif(w == 10a23c)
ShackDrop1.enable(true)
ShackDrop2.enable(true)
ShackDrop3.enable(true)
ShackDrop4.enable(true)
ShackDrop5.enable(true)
ShackDrop6.enable(true)
ShackDrop7.enable(true)
ShackDrop8.enable(true)
ShackDrop9.enable(true)
ShackDrop10.enable(true)
ShackDrop11.enable(true)
elseif(w == 10a238)
ShackDrop1.enable(true)
ShackDrop2.enable(true)
ShackDrop3.enable(true)
ShackDrop4.enable(true)
ShackDrop5.enable(true)
ShackDrop6.enable(true)
ShackDrop7.enable(true)
ShackDrop8.enable(true)
ShackDrop9.enable(true)
ShackDrop10.enable(true)
ShackDrop11.enable(true)
elseif(w == 10a231)
ShackDrop1.enable(true)
ShackDrop2.enable(true)
ShackDrop3.enable(true)
ShackDrop4.enable(true)
ShackDrop5.enable(true)
ShackDrop6.enable(true)
ShackDrop7.enable(true)
ShackDrop8.enable(true)
ShackDrop9.enable(true)
ShackDrop10.enable(true)
ShackDrop11.enable(true)
elseif(w == d4886)
ShackDrop1.enable(true)
ShackDrop2.enable(true)
ShackDrop3.enable(true)
ShackDrop4.enable(true)
ShackDrop5.enable(true)
ShackDrop6.enable(true)
ShackDrop7.enable(true)
ShackDrop8.enable(true)
ShackDrop9.enable(true)
ShackDrop10.enable(true)
ShackDrop11.enable(true)
elseif(w == c8220)
ShackDrop1.enable(true)
ShackDrop2.enable(true)
ShackDrop3.enable(true)
ShackDrop4.enable(true)
ShackDrop5.enable(true)
ShackDrop6.enable(true)
ShackDrop7.enable(true)
ShackDrop8.enable(true)
ShackDrop9.enable(true)
ShackDrop10.enable(true)
ShackDrop11.enable(true)
elseif(w == c821f)
ShackDrop1.enable(true)
ShackDrop2.enable(true)
ShackDrop3.enable(true)
ShackDrop4.enable(true)
ShackDrop5.enable(true)
ShackDrop6.enable(true)
ShackDrop7.enable(true)
ShackDrop8.enable(true)
ShackDrop9.enable(true)
ShackDrop10.enable(true)
ShackDrop11.enable(true)
else
if(ShackDrop1.isdisabled())
gotostate("s")
else
ShackDrop1.disable(true)
ShackDrop2.disable(true)
ShackDrop3.disable(true)
ShackDrop4.disable(true)
ShackDrop5.disable(true)
ShackDrop6.disable(true)
ShackDrop7.disable(true)
ShackDrop8.disable(true)
ShackDrop9.disable(true)
ShackDrop10.disable(true)
ShackDrop11.disable(true)
endif
endif
EndEvent
EndState}
Hat inzwischen jemand etwas zu meiner ersten Frage gefunden?
 
Wo finde ich denn den Script vom Stab des Magnus. Ich find im CS nicht passendes, nur zwei scripts die für die grafischen Effekte zuständig sind.
 
@MaGlas: Du musst bei den Wetter-Abfragen die normale ID angeben, die Du mir ein paar Beiträge vorher geschrieben hast. Außerdem muss unten das "}" weg. Der Skript kommt dann auf die Quest.
 
Hallo Leute, hab mich extra hier angemeldet bevor ich noch wegen Papyrus durchdrehe.

Es geht um ein simples Script das auf einem Container liegt und beim Betreten der Zelle die Anzahl einer bestimmten Zutat in dem Container ausliest.
Code:
Scriptname wqEggCountScript extends Container

Container Property wqTestContainerREF auto ;Container auf dem das Script liegt
Ingredient Property BirdEgg03 auto ;Zutat: Hühnerei
int EggCount                                              

Event OnCellAttach()
;Beim Betreten der Zelle soll abgefragt werden wieviele Hühnereier im Container sind

    EggCount = wqTestContainerREF.GetitemCount(BirdEgg03)

endEvent

Hab auch schon mit functions rumprobiert aber die Fehlermeldung bleibt im Grunde gleich:
Code:
Starting 1 compile threads for 1 files...
Compiling "wqEggCountScript"...
c:\program files (x86)\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\wqEggCountScript.psc(10,31): GetitemCount is not a function or does not exist
c:\program files (x86)\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\wqEggCountScript.psc(10,1): type mismatch while assigning to a int (cast missing or types unrelated)
No output generated for wqEggCountScript, compilation failed.

Batch compile of 1 files finished. 0 succeeded, 1 failed.
Failed on wqEggCountScript
 
das Container Script kann anscheinend die Function "GetItemCount" nicht.
Füg mal in die erste Zeile nach "extends" "ObjectReference" statt "Container" ein.

außerdem solltest du evtl. auch festlegen dass z.B. nur wenn der Spieler die Cell betritt das Script arbeitet

Code:
Event OnCellAttach(Actor akActorRef)
    if (akActorRef = Game.GetPlayer())
       ; mach dies und jenes

    else
       ; nix
    endif
EndEvent
 
Zuletzt bearbeitet:
  • Like
Reaktionen: wallice
Danke für den Tipp, hatte ganz vergessen daß OnCellAttach auch bei Begleitern losfeuern würde. Aber das Problem mit GetItemCount bleibt, ob ich nun das Script für Container oder ObjectReference definiere scheint das Script den Befehl einfach nicht zu kennen.

Edit: Supi, dein Tipp mit der ObjectReference hat mich auf die richtige Fährte geführt.
Die Property wqTestContainerREF darf nicht als Container declariert werden sondern als ObjectReference. Also GetItemCount läuft nur auf Actors und ObjectReference!:roll:
 
Zuletzt bearbeitet:
Code:
Scriptname wqEggCountScript extends[B][COLOR="#B22222"] ObjectReference[/COLOR][/B]

[COLOR="#B22222"][B]ObjectReference[/B][/COLOR] Property wqTestContainerREF auto
Ingredient Property BirdEgg03 auto
int EggCount                                              

Event OnCellAttach()
;Beim Betreten der Zelle soll abgefragt werden wieviele Hühnereier im Container sind

   EggCount = wqTestContainerREF.GetitemCount(BirdEgg03)

endEvent
 
@Van Helsing - Ja sieht etwas komisch aus, ist auch nur der Teil des Scripts der nicht gefunzt hat und gehört eigentlich zu einem Hühnerstall den ich gerade in mein Spieler-Haus einbaue. Nun klappt es:D
 
Hallo liebe Community!
Weiß zufällig jemand, wie ich einen Actor dazu bringe, nach einem Dialog den Spieler anzugreifen? Ich hab schon ziemlich viel versucht, nichts scheint zu klappen...
 
- Auf die letzte Antwortzeile im Dialogmenü doppelklicken nach der der Kampf beginnen soll
- Im Fenster Sripts/End (unten) folgendes eintragen:

StartCombat (Game.GetPlayer())

Müsste theoretisch funktionieren.

Bin mir jetzt nur nicht sicher ob des CK aus dem Dialogmenü heraus weiß, dass derjenige Gesprächspartner, der den Dialog spricht auch derjenige sein soll der dich angreift mit dem StartCombat Befehl.
Evtl. müsste man den entsprechenden Actor dann als Property festlegen und die Zeile so schreiben:

PropertyName.StartCombat (Game.GetPlayer())
 
Zuletzt bearbeitet: