Construction Set Skriptthread zum Construction Set

Waldmeister meinte, dass du aus den markierten Zeilen das Minus löscht, indem du vorher die Variable auf den negativen Wert setzt und nicht erst bei dem Befehl.
Also aus dem:
PHP:
long tempVar

    player.modAV2 health -tempVar
wird:
PHP:
long tempVar
long tempVar2

    let tempVar2 := -tempVar
    player.modAV2 health tempVar2
 
Zuletzt bearbeitet:
Also ich habs mal getestet und er hat mir zum Glück keine Fehler mehr angezeigt :)

Nur läuft es noch nicht soo gut....

Hier die Liste an Bugs :)

  • Wenn man N drückt (Energie wieder auf den Player), dann geht das zwar, aber auf dem Item werden auch 10 Punkte jeder Sorte hinzugefügt :(
  • Das Script läuft auch ohne, dass man den Ring angelegt hat...
  • Die Energie, die man wieder auf sich überträgt kann das Maximum nicht übersteigen :( sollte sie aber, sonst bringt es nichts...
  • Das Script läuft noch nicht soo flüssig wie ich es gerne hätte...es überträgt die Energie nicht direkt wenn man auf M oder N drückt :(
Das Script sieht jetzt so aus:

PHP:
scn BRArenRingQuestScript

long health
long magicka
long fatigue

long pHealth
long pMagicka
long pMagickaSwitched
long pFatigue

long pBaseHealth
long pBaseMagicka
long pBaseFatigue

long tempVar
long tempVarSwitched

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 )
    let tempVarSwitched := -tempVar
    player.modAV2 health tempVarSwitched
    let health += tempVar
  endif

  let pMagicka := player.getAV Magicka
  if pMagicka > 10
    player.modAV2 magicka -10
    let magicka += 10
  elseif pMagicka > 0
    let tempVarSwitched := -tempVar
    player.modAV2 magicka tempVarSwitched
    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 )
    let tempVarSwitched := -tempVar
    player.modAV2 fatigue tempVarSwitched
    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

Könnt ihr mir helfen? Ich will es verstehen und möchte in Zukunft nicht unbedingt bei jeder kleinen Sache anfragen müssen. Ich habe so das dumpfe Gefühl, dass es Kleinigkeiten sind :lol:

Naja danke im Voraus! :flower:
 
Ich muss mich leider noch mal noch mal wegen "setTexturePath" melden. Ich bekomme den Befehl einfach nicht zum laufen. Der Pfad meiner Textur ist "\Oblivion\Data\Textures\Schmelz-OaM\Säule_02.dds" aber ganz egal, wo ich den Pfad abschneide, es passiert einfach nichts!

Und wie bekomme ich "getTexturePath" in einer Bedingung zum laufen? Der Compiler sagt immer er kennt den Befehl "Pfad" nicht...
 
@ Schmelz: Zu deinem ersten Problem: Hast du mal probiert "Update 3D" in das Script zu packen?
Ich hatte schon häufig den Fall, dass erst nach dem Befehl gewisse Änderungen (z.B. die Farbe eines Lichtes) an Objekten angezeigt wurden.
 
  • Like
Reaktionen: Schmelz
PHP:
SCN ...

Begin OnActivate

    player.kill
End
So glaube ich :?


PS: Kann mir keiner helfen?

Also ich habs mal getestet und er hat mir zum Glück keine Fehler mehr angezeigt :)

Nur läuft es noch nicht soo gut....

Hier die Liste an Bugs :)

  • Wenn man N drückt (Energie wieder auf den Player), dann geht das zwar, aber auf dem Item werden auch 10 Punkte jeder Sorte hinzugefügt :(
  • Das Script läuft auch ohne, dass man den Ring angelegt hat...
  • Die Energie, die man wieder auf sich überträgt kann das Maximum nicht übersteigen :( sollte sie aber, sonst bringt es nichts...
  • Das Script läuft noch nicht soo flüssig wie ich es gerne hätte...es überträgt die Energie nicht direkt wenn man auf M oder N drückt :(
Das Script sieht jetzt so aus:

PHP:
scn BRArenRingQuestScript

long health
long magicka
long fatigue

long pHealth
long pMagicka
long pMagickaSwitched
long pFatigue

long pBaseHealth
long pBaseMagicka
long pBaseFatigue

long tempVar
long tempVarSwitched

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 )
    let tempVarSwitched := -tempVar
    player.modAV2 health tempVarSwitched
    let health += tempVar
  endif

  let pMagicka := player.getAV Magicka
  if pMagicka > 10
    player.modAV2 magicka -10
    let magicka += 10
  elseif pMagicka > 0
    let tempVarSwitched := -tempVar
    player.modAV2 magicka tempVarSwitched
    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 )
    let tempVarSwitched := -tempVar
    player.modAV2 fatigue tempVarSwitched
    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
Könnt ihr mir helfen? Ich will es verstehen und möchte in Zukunft nicht unbedingt bei jeder kleinen Sache anfragen müssen. Ich habe so das dumpfe Gefühl, dass es Kleinigkeiten sind :lol:

Naja danke im Voraus! :flower:
 
Zuletzt bearbeitet:
danke, irgendwie hätt ich mir das denken können ...:roll:
EDIT: kappt nicht, der macht ne reihe fehlermeldungen bei speichern. der hat probleme mit sethealth 0
klappt vielleicht player.kill ?
Edit: bei player.kill macht er keine probleme
 
Zuletzt bearbeitet:
  • Like
Reaktionen: SkyrimBee
Der Befehl hieße "setAV health", aber die Variante mit "kill" ist ohnehin besser. Du solltest auch noch die Bedingung "if isActionRef player" einfügen, sonst stirbt der Spieler, wenn der Activator von irgendetwas aktiviert wird.

@OblivionBee:
1. Keine Ahnung... für mich siehts eigentlich korrekt aus.

2. Dafür musst du einfach ganz am Anfang
PHP:
if player.getEquipped <Ring-ID> == 0
  return
endif
einfügen.

3. Dann wirds deutlich einfacher...
Aus:
PHP:
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
wird:
PHP:
elseif isKeyPressed3 49        
  Message "Ihr gewinnt Energie aus dem Ring!"

  if health >= 10
    player.modAV2 health 10
    let health -= 10
  elseif health > 0
    player.modAV2 health health
    let health := 0
  endif

  if magicka >= 10
    player.modAV2 magicka 10
    let magicka -= 10
  elseif magicka > 0
    player.modAV2 magicka magicka
    let magicka := 0
  endif

  if fatigue >= 10
    player.modAV2 fatigue 10
    let fatigue -= 10
  elseif fatigue > 0
    player.modAV2 fatigue fatigue
    let fatigue := 0
  endif

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

4. Verlässt du dich dabei voll und ganz auf die Anzeige der Message oder überprüfst du das in der Konsole?
 
  • Like
Reaktionen: SkyrimBee
Danke Diarrhoe! :flower: (Man ich verteile hier viele Blumen :lol:)

1.) Könnte jetzt behoben sein, cih werds gleich mal gucken
2.) Ich denke, das ist die Lösung. Dann kann ich ja die Questcondition "GetEquiped" entfernen :)
3.) Danke dafür, ich gucks mal nach :)
4.) In die Konsole hab ich noch nicht geguckt. Das werde ich jetzt mal nachsehen :)

Ich melde mich nochmal.

PS: Geht dieses Skript so in Ordnung?

PHP:
SCN ABRErstausgabeTriggerScript

short doonce

Begin OnTrigger
    
    if doonce == 0    
        if getstage BR01Anfang == 100 && getstage BR02 < 10
            setstage BR02 10
            let doonce := 1
        endif
    endif
end

Es soll folgendes machen: Wenn man in einen Trigger gerät, soll eine Queststage gesetzt werden. Unter einer Bedingung: Es soll die eine Quest fertig sein und die eine unter 10. Und es soll nur einmal passieren :)
 
Sieht gut aus, aber du solltest den Block noch etwas spezifizieren, da der Block sonst von allem möglichen mit Kollision ausgelöst werden kann. Also:
PHP:
Begin onTriggerActor player
 
  • Like
Reaktionen: SkyrimBee
OblivionBee schrieb:
  • Wenn man N drückt (Energie wieder auf den Player), dann geht das zwar, aber auf dem Item werden auch 10 Punkte jeder Sorte hinzugefügt gefixt
  • Das Script läuft auch ohne, dass man den Ring angelegt hat... gefixt
  • Die Energie, die man wieder auf sich überträgt kann das Maximum nicht übersteigen :( sollte sie aber, sonst bringt es nichts... funzt noch nicht
  • Das Script läuft noch nicht soo flüssig wie ich es gerne hätte...es überträgt die Energie nicht direkt wenn man auf M oder N drückt :( funzt noch nicht (in der Konsole steht auch nichts -.- )
Das Script sieht jetzt so aus:

PHP:
scn BRArenRingQuestScript

long health
long magicka
long fatigue

long pHealth
long pMagicka
long pMagickaSwitched
long pFatigue

long pBaseHealth
long pBaseMagicka
long pBaseFatigue

long tempVar
long tempVarSwitched

float fQuestDelayTime


Begin GameMode
    
if fQuestDelayTime
  let fquestdelaytime := 0.001
endif
    
if player.getEquipped BRArenRing == 0
  return
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 )
    let tempVarSwitched := -tempVar
    player.modAV2 health tempVarSwitched
    let health += tempVar
  endif

  let pMagicka := player.getAV Magicka
  if pMagicka > 10
    player.modAV2 magicka -10
    let magicka += 10
  elseif pMagicka > 0
    let tempVarSwitched := -tempVar
    player.modAV2 magicka tempVarSwitched
    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 )
    let tempVarSwitched := -tempVar
    player.modAV2 fatigue tempVarSwitched
    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!"

  if health >= 10
    player.modAV2 health 10
    let health -= 10
  elseif health > 0
    player.modAV2 health health
    let health := 0
  endif

  if magicka >= 10
    player.modAV2 magicka 10
    let magicka -= 10
  elseif magicka > 0
    player.modAV2 magicka magicka
    let magicka := 0
  endif

  if fatigue >= 10
    player.modAV2 fatigue 10
    let fatigue -= 10
  elseif fatigue > 0
    player.modAV2 fatigue fatigue
    let fatigue := 0
  endif

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

end

Danke Diarrhoe!

Ich wäre sehr dankbar, wenn wir die zwei Sachen auch noch rauskriegen! :)

PS: Das, was du im vorherigen Post geschriebne hast, hab ich eingefügt. Macht Sinn! :)
 
Ist es möglich über einen Skriptbefehl (natürlich mit OBSE) die Gesichtstextur neu zu bestimmen, wenn man das Geschlecht ändert?

danke
 
Ich brauch auch mal wieder Hilfe. Ich möchte in einem Quest Script abfragen ob ein NPC tot ist. Dies soll bestimmte Aktionen auslösen. Dazu nutze ich die GetDead Abfrage. Das CS erkennt jedoch die Referenz nicht und gibt mir als Fehlermeldung immer "Unknown referecend object" aus. Ich habe bisher NPC's die ich in Scripts nutzen wollte immer eine ID nach dem Typ xxxxRef gegeben. Hat bisher auch funktioniert. Auch die Variante am Anfang das Objekt per Ref xxx zu deklarieren bringt keinen Erfolg. Ich hab schon alles probiert was mein Wissen hergibt und auch Google brachte mich nicht wirklich weiter. Hat einer vlt eine Idee woran das liegen könnte?