Construction Set Skriptthread zum Construction Set

Ist sonst alles egal? Also Priority und Name, Quest Conditions und Start Game Enabled?

Mal so am Rande: Dass das mit der Energiespeicherung läuft, hängt ja jetzt gar nicht davon ab, ob man dieses Item angelegt hat o_O
Wie kann ich denn jetzt dem Spiel sagen, dass es das nur zulassen soll, wenn ich z.B. diesen Ring angelegt habe?
 
1. Du musst einen Haken bei "Start Game Enabled" setzen.

2. Dafür musst du "player.getEquipped <Ring-ID>" benutzen. Eventuell kannst du das auch als Quest-Bedingung erstellen, dann sparst du dir das Einfügen im Skript, aber da bin ich mir nicht ganz sicher...
 
  • Like
Reaktionen: SkyrimBee
Ich werds mal ausprobieren. Noch eine Frage:
Wenn ich den Ring jetzt wieder ablege, aber schon Energie reingepackt habe...ist die dann weg, sobald man den Ring ablegt oder aus dem Inventar packt? Wenn ja, wie könnte man das verhindern? :)

Danke an alle für eure großzügige Hilfe! :)
 
Ja. Also ich bin jetzt schon soweit, dass ich sterbe, wenn zu oft auf M draufdrücke :lol:
Also es ist so: Ich hab das Item im Inventar, nicht angelegt, und drücke auf M. Nichts passiert. Ich drücke ein paar Mal mehr drauf und irgendwann falle ich tot um und er sagt mir dass ich Energie übertrage und im Item jetzt jeweils 5 Punkte von Leben, Magie und Ausdauer sind.

Schön und gut, ich bin tot^^

Dumm nur, dass man den Fortschritt an den drei Balken unten links nicht sieht. Optimal wäre es, wenn ich M gedrückt halte und ich unten links sehe, dass alles langsam entzogen wird. Und nicht erst gar nichts und dann auf einmal --> tot :(
 
Zuletzt bearbeitet:
Ich hab mich jetzt nicht groß damit beschäftigt, aber ich würde mal die ganzen "Label"- und "GoTo"-Befehle weglassen...
Außerdem solltest du diese Abschnitte:
Code:
player.modAV2 health -20
if(player.getav health >= 0)
  set health to (health +20)
endif
durch sowas ersetzen:
Code:
if player.getAV health > 20
  player.modAV2 health -20
  let health += 20
endif
Das gleiche noch für Magicka und Ausdauer.
 
  • Like
Reaktionen: SkyrimBee
Kann es sein, dass da ein Fehler drin war?
Wenn ich jetzt auf Energie wiedeherstellen drücke, dann zieht er mir noch mehr ab. Ich glaube das liegt an dein " - " in deinem Skript, Diarrhoe :) [gefixt]

Hat sonst jemand eine Idee wie man machen kann, dass kontinuierlich Energie entzogen wird, wenn man die Taste gedrückt hält (das gleiche bei Energie wiederherstellen)? Und wie das dann auch unten in der Healthbar gezeigt wird? :( [nicht gefixt]


EDIT: Im Moment sieht mein Skript so aus:

Code:
SCN BRArenRingQuestScript


Long Health
Long Magicka
Long Fatigue

Long pHealth
Long pMagicka
Long pFatigue

Float fQuestDelayTime



Begin GameMode
    

if(fquestdelaytime)
        
     set fquestdelaytime to 1
        
endif
    

 if(iskeypressed3 50)    ;zum Speichern der Werte
        

    Message "Ihr übertragt Eure Energie!"

     set phealth to player.getbaseactorvalue health
     player.modAV2 health -5
     if(player.getav health >= 0)
         set health to (health +5)
     endif

     set pMagicka to player.getbaseactorvalue magicka
     player.modAV2 magicka -5
     if(player.getav magicka >= 0)
         set magicka to (magicka +5)
     endif

     set pFatigue to player.getbaseactorvalue fatigue
     player.modav2 fatigue -5
     if(player.getav fatigue >= 0)
          set fatigue to (fatigue +5)
      endif
        

     Message "Im Ring: Lebenspunkte: %.0f / Magicka: %.0f / Ausdauer: %.0f" health, magicka, fatigue


        
  elseif(iskeypressed3 49)    ; zum Wiederherstellen der Werte
        

    Message "Ihr gewinnt Energie aus dem Ring!"

    if player.getAV health > 10
      player.modAV2 health 10
        let health += 10
    endif
        
    if player.getAV magicka > 10
      player.modAV2 magicka 10
        let magicka += 10
    endif
        
    if player.getAV fatigue > 10
      player.modAV2 fatigue 10
        let fatigue += 10
    endif        
        

     Message "Im Ring: Lebenspunkte: %.0f / Magicka: %.0f / Ausdauer: %.0f" health, magicka, fatigue
        
 else
          return
   endif

end

Das dumme: Wenn ich jetzt Energie vom Ring auf mich übertrage, lädt sich der Ring weiter auf :( [nicht gefixt]
 
Zuletzt bearbeitet:
Ich schrieb ja auch nicht, dass du das
Code:
player.modAV2 health +20
if(player.getav health < pHealth)
  set health to (health -20)
endif
durch das
Code:
if player.getAV health > 20
  player.modAV2 health -20
  let health += 20
endif
ersetzen solltest, sondern, das hier
Code:
player.modAV2 health -5
if(player.getav health >= 0)
  set health to (health +5)
endif
:ugly:
Du hast gerade den Code zum Aufladen mit dem Code zum Entladen verwechselt. Beim Entladen müsstest du fast nur die Vorzeichen von meinem geposteten Code ändern.

Insgesammt sollte das Skript dann so aussehen:
Code:
scn name

long health
long magicka
long fatigue

long pHealth
long pMagicka
long pFatigue

long pBaseHealth
long pBaseMagicka
long pBaseFatigue

long tempVar

float fQuestDelayTime


Begin GameMode
    
if fQuestDelayTime
  let fquestdelaytime := 0.001
endif

if isKeyPressed3 50
  Message "Ihr übertragt Eure Energie!"

  let pHealth := player.getAV health
  if pHealth > 10
    player.modAV2 health -10
    let health += 10
  elseif pHealth > 1
    let tempVar := ( pHealth - 1 )
    player.modAV2 health -tempVar
    let health += tempVar
  endif

  let pMagicka := player.getAV Magicka
  if pMagicka > 10
    player.modAV2 magicka -10
    let magicka += 10
  elseif pMagicka > 0
    player.modAV2 magicka -pMagicka
    let magicka += pMagicka
  endif

  let pFatigue := player.getAV fatigue
  if pFatigue > 10
    player.modAV2 fatigue -10
    let fatigue += 10
  elseif pFatigue > 1
    let tempVar := ( pFatigue - 1 )
    player.modAV2 fatigue -tempVar
    let fatigue += tempVar
  endif
        
  Message "Im Ring: Lebenspunkte: %.0f / Magicka: %.0f / Ausdauer: %.0f" health, magicka, fatigue
        
elseif isKeyPressed3 49        
  Message "Ihr gewinnt Energie aus dem Ring!"

  let pHealth := player.getAV health
  let pBaseHealth := player.getBaseAV health
  if pHealth <= ( pBaseHealth - 10 )
    player.modAV2 health 10
    let health -= 10
  elseif pHealth < pBaseHealth
    player.modAV2 health 10
    let health -= ( pBaseHealth - pHealth )
  endif

  let pMagicka := player.getAV magicka
  let pBaseMagicka := player.getBaseAV magicka
  if pMagicka <= ( pBaseMagicka - 10 )
    player.modAV2 magicka 10
    let magicka -= 10
  elseif pMagicka < pBaseMagicka
    player.modAV2 magicka 10
    let magicka -= ( pBaseMagicka - pMagicka )
  endif

  let pFatigue := player.getAV fatigue
  let pBaseFatigue := player.getBaseAV fatigue
  if pFatigue <= ( pBaseFatigue - 10 )
    player.modAV2 fatigue 10
    let fatigue -= 10
  elseif pFatigue < pBaseFatigue
    player.modAV2 fatigue 10
    let fatigue -= ( pBaseFatigue - pFatigue )
  endif

  Message "Im Ring: Lebenspunkte: %.0f / Magicka: %.0f / Ausdauer: %.0f" health, magicka, fatigue
        
endif

end

Dass es nicht kontinuierlich ging, könnte im Übrigen daran gelegen haben, dass du "fQuestDelayTime" auf 1 gesetzt hast.
 
  • Like
Reaktionen: SkyrimBee
Tausend Dank! Ich werds mal testen. Das mit fQuestDelayTime = 1 hatte ich gemacht, weil es mit 0.001 auch genauso gelaufen ist. Da dachte ich, wenn ich sie auf 1 setze, dass es geht -.-

EDIT: Er gibt mir wieder Fehler :lol:

Und zwar in den fettgedruckten Lines:

Code:
scn BRArenRingQuestScript

long health
long magicka
long fatigue

long pHealth
long pMagicka
long pFatigue

long pBaseHealth
long pBaseMagicka
long pBaseFatigue

long tempVar

float fQuestDelayTime


Begin GameMode
    
if fQuestDelayTime
  let fquestdelaytime := 0.001
endif

if isKeyPressed3 50
  Message "Ihr übertragt Eure Energie!"

  let pHealth := player.getAV health
  if pHealth > 10
    player.modAV2 health -10
    let health += 10
  elseif pHealth > 1
    let tempVar := ( pHealth - 1 )
    [B]player.modAV2 health -tempVar[/B]
    let health += tempVar
  endif

  let pMagicka := player.getAV Magicka
  if pMagicka > 10
    player.modAV2 magicka -10
    let magicka += 10
  elseif pMagicka > 0
    [B]player.modAV2 magicka -pMagicka[/B]
    let magicka += pMagicka
  endif

  let pFatigue := player.getAV fatigue
  if pFatigue > 10
    player.modAV2 fatigue -10
    let fatigue += 10
  elseif pFatigue > 1
    let tempVar := ( pFatigue - 1 )
    [B]player.modAV2 fatigue -tempVar[/B]
    let fatigue += tempVar
  endif
        
  Message "Im Ring: Lebenspunkte: %.0f / Magicka: %.0f / Ausdauer: %.0f" health, magicka, fatigue
        
elseif isKeyPressed3 49        
  Message "Ihr gewinnt Energie aus dem Ring!"

  let pHealth := player.getAV health
  let pBaseHealth := player.getBaseAV health
  if pHealth <= ( pBaseHealth - 10 )
    player.modAV2 health 10
    let health -= 10
  elseif pHealth < pBaseHealth
    player.modAV2 health 10
    let health -= ( pBaseHealth - pHealth )
  endif

  let pMagicka := player.getAV magicka
  let pBaseMagicka := player.getBaseAV magicka
  if pMagicka <= ( pBaseMagicka - 10 )
    player.modAV2 magicka 10
    let magicka -= 10
  elseif pMagicka < pBaseMagicka
    player.modAV2 magicka 10
    let magicka -= ( pBaseMagicka - pMagicka )
  endif

  let pFatigue := player.getAV fatigue
  let pBaseFatigue := player.getBaseAV fatigue
  if pFatigue <= ( pBaseFatigue - 10 )
    player.modAV2 fatigue 10
    let fatigue -= 10
  elseif pFatigue < pBaseFatigue
    player.modAV2 fatigue 10
    let fatigue -= ( pBaseFatigue - pFatigue )
  endif

  Message "Im Ring: Lebenspunkte: %.0f / Magicka: %.0f / Ausdauer: %.0f" health, magicka, fatigue
        
endif

end

Fehlermeldung ist überall gleich: Unknown variable '[...]' for parameter amount.

Wie könnte man das rausbügeln? :)
 
Zuletzt bearbeitet:
Benutzt du OBSE in der Version 20? Dann kannst du mal versuchen, ob es funktioniert, wenn du einen Unterstrich vor "GameMode" setzt, also:
Code:
Begin _GameMode

Wenn es dann immer noch nicht funktioniert, setze "-Variable" mal in Klammern...
 
  • Like
Reaktionen: SkyrimBee
Das erste gibt nur noch mehr Probleme o___O
Und das zweite löst es nicht sondern gibt nun die Meldung "Missing parameter amount" aus. Kann es sein, dass ModAV2 eine Zahl will?

OBSE 20 hab ich :)
 
Noch mal kurz zum Thema Textur-Wechsel:

In der OBSE-Dokumentation steht zum Befehl "setTexturePath" folgendes:
"(nothing) reference.SetTexturePath path:string object:ref"

Was soll ich bei "object:ref" eintragen? Ich habe aktuell nichts da stehen, bekomme aber keinen Fehler...
 
Das ist bei vielen Befehlen so. Ich weis auch nicht so recht, was das soll, aber in der Regel funktioniert der Befehl nur, wenn man das gewünschte Objekt, das die Änderung erhalten soll, bei "object:ref" hinschreibt.
Wenn jemand eine Erklärung hat, wäre ich dankbar, wenn er sie sagen könnte.
Meine Vermutung wäre ja, dass sie (das OBSE-Team) es so programmieren mussten, und es nur der Vollständigkeit halber hingeschrieben haben.
 
  • Like
Reaktionen: Schmelz
Nö:
This function sets the model for the base object. Call it on a reference, or supply a base object ID; if both are used, the base object ID takes precedence.
Quelle

Auf Deutsch: Entweder "[ref.]SetModelPath [path:string]" oder "SetModelPath [path:string] [obj:id]". Gibst Du sowohl die ref als auch die Ojekt-ID an, wird der Befehl auf die Objekt-ID bezogen.
 
Danke, aber gilt das auch für den Textur-Pfad? Dazu steht nichts derartiges; weder im CS-Wiki, noch in der Blender-Doku.

Mir wäre es wichtig, dass es nur auf die Referenz bezogen ist.
 
Wie meinen?
Du hast die Wahl zwischen
Code:
Ref.SetModelPath "Dein Pfad zur Textur"
,
Code:
SetModelPath "Dein Pfad zur Textur" Objekt-ID
und
Code:
Ref.SetModelPath "Dein Pfad zur Textur" Objekt-ID
.

Bei Letzterem würde sich der Befehl eben auf das Objekt mit der angegebenen ID auswirken (da Ref und Objekt-ID angegeben wurden).
Da es bei dir auf die Referenz bezogen sein soll, nimmst Du den ersten Code!

Edit: Nein, ich habe nichts durcheinander gebracht. Ich habe nur etwas weiter gedacht, das Problem anhand einem anderen Befehl geklärt und lediglich vergessen, darauf hinzuweisen, dass es sich bei SetTexturPath gleich verhält.
 
Zuletzt bearbeitet von einem Moderator: