Construction Set Skriptthread zum Construction Set

@Jollina:
Dann versuchs mal so:
Code:
scn name

short doonce
long BaseHealth1
long BaseHealth2

Begin GameMode
 if doonce == 0
  set BaseHealth1 to getObjectHealth
  setObjectHealth to (20*BaseHealth1 + 0.1) ;hab jetzt eigentlich nur ein "to" ergänzt
  set BaseHealth2 to getObjectHealth
  set doonce to 1
 elseif doonce == 1
  if getCurrentHealth / BaseHealth2 * 100 > 1
   setObjectHealth BaseHealth1
   set doonce to 2
  endif
 endif
end
 
Missing Set bla bla bla wird dann erscheinen^^

Ich denke mal du kannst in dem Befehl keine direkte Rechnung als Parameter verwenden sondern solltest erst die Rechnung machen und dann halt die Variable als Parameter nutzen.
 
So zum Beispiel:
Code:
scn name

short doonce
long BaseHealth1
long BaseHealth2
long NewHealth

Begin GameMode
 if doonce == 0
  set BaseHealth1 to getObjectHealth
  set NewHealth to (20*BaseHealth + 0.1)
  setObjectHealth NewHealth
  set BaseHealth2 to getObjectHealth
  set doonce to 1
 elseif doonce == 1
  if getCurrentHealth / BaseHealth2 * 100 > 1
   setObjectHealth BaseHealth1
   set doonce to 2
  endif
 endif
end
 
  • Like
Reaktionen: Jollina
Code:
scn name

short doonce
long BaseHealth1
long BaseHealth2
long NewHealth

Begin GameMode
 if doonce == 0
  set BaseHealth1 to getObjectHealth
  set NewHealth to ((20*BaseHealth1) + 0.1)
  SetObjectHealth NewHealth 
  set BaseHealth2 to getObjectHealth
  set doonce to 1
 elseif doonce == 1
  if (( getCurrentHealth / BaseHealth2 ) * 100 ) > 1
   setObjectHealth BaseHealth1
   set doonce to 2
  endif
 endif
end
 
  • Like
Reaktionen: Jollina
@Jolina:
Versuch mal das hier:
Code:
If Step == 0
    Return
ElseIf Step == -10 && ( Player.GetStage SmithApprentice >= 25 )
    Set Step to 10
    MessageBox "Welches Rohmaterial möchtet Ihr verarbeiten?","Eisen","Feineisen","Stahl","Feinstahl","zurück"
Set Button to -1

ElseIf Step == 10
    Set Button to GetButtonPressed
        If Button == 0 && ( Player.GetItemCount OreNugget <= 3 )
            MessageBox "Ihr besitzt nicht genug Rohmaterial!"
            Set Step to 0

        ElseIf Button == 0 && ( Player.GetItemCount OreNugget >= 4 )
            Player.RemoveItem OreNugget 4
            Player.AddItem WeapIronDaggerSA 1
            Set Step to 0

    ElseIf Button == 1 && ( Player.GetItemCount OreNugget <= 1 ) && ( Player.GetItemCount Gem0GoldNugget <= 1 )
            MessageBox "Ihr besitzt nicht genug Rohmaterial!"
            Set Step to 0
    ElseIf Button == 1 && ( Player.GetItemCount OreNugget >= 2 ) && ( Player.GetItemCount Gem0GoldNugget >= 2 )
            Player.RemoveItem OreNugget 2
            Player.RemoveItem Gem0GoldNugget 2
            Player.AddItem WeapIronDaggerFineSA 1
            Set Step to 0

    ElseIf Button == 2 && ( Player.GetItemCount OreNugget <= 1 ) && ( Player.GetItemCount Gem0SilverNugget <= 1 )
            MessageBox "Ihr besitzt nicht genug Rohmaterial!"
            Set Step to 0

    ElseIf Button == 2 && ( Player.GetItemCount OreNugget >= 2 ) && ( Player.GetItemCount Gem0SilverNugget >= 2 )
            Player.RemoveItem OreNugget 2
            Player.RemoveItem Gem0SilverNugget 2
            Player.AddItem WeapSteelDaggerSA 1
            Set Step to 0

    ElseIf Button == 3 && ( Player.GetItemCount OreNugget <= 1 ) && ( Player.GetItemCount Gem0SilverNugget == 0 ) && ( Player.GetItemCount Gem0GoldNugget == 0 )
            MessageBox "Ihr besitzt nicht genug Rohmaterial!"
            Set Step to 0

    ElseIf Button == 3 && ( Player.GetItemCount OreNugget >=2 ) && ( Player.GetItemCount Gem0SilverNugget >= 1 ) && ( Player.GetItemCount Gem0GoldNugget >= 1 )
            Player.RemoveItem OreNugget 2
            Player.RemoveItem Gem0SilverNugget 1
            Player.RemoveItem Gem0GoldNugget 1
           Player.AddItem WeapSteelDaggerFineSA 1
            Set Step to 0

    ElseIf Button == 4
            Return
    EndIf


ElseIf Step == -1
    Set Button to GetButtonPressed
    If Button == 0
        Set Step to -10
    ElseIf Button == 1
        Set Step to 0
    EndIf
EndIf
End
Oblivion steht nicht darauf, immer If und Elseif abwechselnd zu haben. Wenn es so nicht geht, versuch mal für jeden Button (beide 0er, 1er...etc) block Einen If-ElseIf-Endif.

Ja, ging nicht. Hat noch nicht mal Stahl und FEinstahl in der MessageBox angezeigt. Aber ich weiß grad nicht, wie Du das mit Deinem anderen Vorschlag meinst.
 
Code:
scn name

short doonce
long BaseHealth1
long BaseHealth2
long NewHealth

Begin GameMode
 if doonce == 0
  set BaseHealth1 to getObjectHealth
  set NewHealth to ((20*BaseHealth1) + 0.1)
  SetObjectHealth NewHealth 
  set BaseHealth2 to getObjectHealth
  set doonce to 1
 elseif doonce == 1
  if (( getCurrentHealth / BaseHealth2 ) * 100 ) > 1
   setObjectHealth BaseHealth1
   set doonce to 2
  endif
 endif
end

Hab "Begin GameMode" durch "Begin onAdd Player" ausgetauscht. Funktioniert. Nur lassen sich die Waffen dann nicht reparieren. Woran liegt das?
 
Was passiert genau, wenn man die Waffe reparieren will? Kann man die waffe im entsprechenden Menü nicht anklicken, erscheint sie gar nichtmal zur Auswahl oder kann man sie anklicken und hört auch den entsprechenden Sound für eine gelungene Reparatur (der Wert verändert sich nur nicht)? Dann liegt das daran, dass der Basiswert so hoch ist, dass die Reparatur nur einen kleinen Teil ausmacht, zu klein um angezeigt zu werden...

Keinen "onAdd"-Block verwenden! Zumindest nicht für die Kondition "doonce == 1". Da solltest du zumindest einen GameMode- oder (besser) einen MenuMode-Block benutzen. Splitte das Skript sonst einfach auf:
Code:
scn name

short doonce
long BaseHealth
float NewHealth
float Grenzwert

Begin onAdd player
 if doonce == 0
  set BaseHealth1 to getObjectHealth
  set NewHealth to ((20*BaseHealth) + 0.1)
  SetObjectHealth NewHealth 
  set doonce to 1
 endif
end

Begin MenuMode 1035 ;wird ausgeführt, wenn sich das Spiel im Reparieren-Menü befindet
 if doonce == 1
  set Grenzwert to ((getCurrentHealth / NewHealth) * 100)
  if Grenzwert >= 0.5
   setObjectHealth BaseHealth
   set doonce to 2
  endif
 endif
end
 
Hallöchen,
Ich brauche einen Scrip, der bewirkt das nach abschliesen eines Quests eine Rumpelkammer wieder aufgeräummt wird. Wie muss ich vorgehen?
 
Sagt mal wie kann man den Lebenspunkteschaden bei Schildtreffern veringern. Und den stattdessen auf die Ausdauer legen. Das Lustige ist wenn man mit der Waffe Blockt verliert man keine Lebenspunkte.

Fände es viel logischer, wenn man bei Schildtreffern Ausdauer verliert, anstatt Lebenspunkte.

Nur wie macht man das?

Und wer weiss was dazu?
 
Ich glaube, der Ausdauerverlust beim Blocken hängt von deinem Skill ab, bei einer höheren Stufe gibts keinen Abzug mehr. Ansonsten müsste man das in den GameSettings ändern und nicht per Skript regeln, da es ja so auch nicht per Skript geregelt wird (möglich wäre es sicherlich)...
 
  • Like
Reaktionen: robinH
Was passiert genau, wenn man die Waffe reparieren will? Kann man die waffe im entsprechenden Menü nicht anklicken, erscheint sie gar nichtmal zur Auswahl oder kann man sie anklicken und hört auch den entsprechenden Sound für eine gelungene Reparatur (der Wert verändert sich nur nicht)? Dann liegt das daran, dass der Basiswert so hoch ist, dass die Reparatur nur einen kleinen Teil ausmacht, zu klein um angezeigt zu werden...

Keinen "onAdd"-Block verwenden! Zumindest nicht für die Kondition "doonce == 1". Da solltest du zumindest einen GameMode- oder (besser) einen MenuMode-Block benutzen. Splitte das Skript sonst einfach auf:
Code:
scn name

short doonce
long BaseHealth
float NewHealth
float Grenzwert

Begin onAdd player
 if doonce == 0
  set BaseHealth1 to getObjectHealth
  set NewHealth to ((20*BaseHealth) + 0.1)
  SetObjectHealth NewHealth 
  set doonce to 1
 endif
end

Begin MenuMode 1035 ;wird ausgeführt, wenn sich das Spiel im Reparieren-Menü befindet
 if doonce == 1
  set Grenzwert to ((getCurrentHealth / NewHealth) * 100)
  if Grenzwert >= 0.5
   setObjectHealth BaseHealth
   set doonce to 2
  endif
 endif
end

Mit Begin GameMode ging es nicht. Mit onAdd hat es funktioniert, die Waffe hatte dieses orange-rote Symbol für "kaputt" im Menü. Beim draufklicken auf die Waffe selbst kam "Kann nicht verwendet werden bis repariert...blablabla".

Beim reparieren erscheint die Waffe gar nicht im Fenster der zu reparierenden Gegestände.

Den neuen Script werd ich mal eben testen.
 
Zuletzt bearbeitet:
Ich glaube, der Ausdauerverlust beim Blocken hängt von deinem Skill ab, bei einer höheren Stufe gibts keinen Abzug mehr. Ansonsten müsste man das in den GameSettings ändern und nicht per Skript regeln, da es ja so auch nicht per Skript geregelt wird (möglich wäre es sicherlich)...

Ok, aber ich verliere ja keine Ausdauer, das soll ja passieren, sondern ich verliere Lebenspunkte wenn der Gegner da mit voller Wucht drauf kloppt. Ich meine das Schild soll einen doch schützen. So ist das voll dumm. Das da noch keiner was zu gesagt hat.

Wie gesagt da bin ich ohne Schild besser dran. Es sei denn, man wird mit Fernwaffen attakiert. Da ist das Schild dann besser. Aber auch da verliere ich Lebenspunkte wenn ein Pfeil in den Schild einschlägt.

Also du meinst in den Gamesettings. Ja und wo gebe ich da was ein? Habe mir die angesehen und verstehe nur Bahnhof. Wo soll dass den stehen. Gibt es da ein Turtorial für?
 
Ich habe selbst schon nach Tutorials gesucht, aber nichts gefunden. Da es auch ein sehr unerforschtes Gebiet ist, gehe ich davon aus, dass du kaum welche finden wirst. Zufällig habe ich selbst vor ein paar Tagen an den Settings geschraubt und genau das, was du bemängelst, geändert. Allerdings verliert er keine Ausdauer, aber auch keine Lebenspunkte mehr.

Also folgendes musst du ändern, damit du keine Lebenspunkte verlierst:
Code:
fBlockAmountHandToHandMult = 0.2
fBlockAmountWeaponMult = 1
fBlockMax = 1
fBlockScoreNoShieldMult = 1
fBlockSkillBase = 100
fBlockSkillMult = 1
Ich bitte jeden, der das in seiner Mod benutzt, mich in den Credits zu benutzen - Es hat mich immerhin einiges an Zeit gekostet um die richtigen Werte zu finden.

Da es keine Settings gibt, um Ausdauert bei Treffern zu entziehen, musst du das mit OBSE umgehen. Mit IsRecoiling und IsStaggered und einem ordentlichen Quest-script sollte es auch möglich sein, die Ausdauer abzuziehen.

Gildur
 
  • Like
Reaktionen: robinH
Mit Begin GameMode ging es nicht. Mit onAdd hat es funktioniert, die Waffe hatte dieses orange-rote Symbol für "kaputt" im Menü. Beim draufklicken auf die Waffe selbst kam "Kann nicht verwendet werden bis repariert...blablabla".

Beim reparieren erscheint die Waffe gar nicht im Fenster der zu reparierenden Gegestände.

Den neuen Script werd ich mal eben testen.


Geht nicht... Ich verzweifle noch :cry:

Aber danke für die umfangreiche Hilfe!
 
Ja, ging nicht. Hat noch nicht mal Stahl und FEinstahl in der MessageBox angezeigt. Aber ich weiß grad nicht, wie Du das mit Deinem anderen Vorschlag meinst.

Dann machen wir es einfach mal ganz anders:

Code:
If Step == 0 && Player.GetStage SmithApprentice >= 25
    MessageBox "Welches Rohmaterial möchtet Ihr verarbeiten?","Eisen","Feineisen","Stahl","Feinstahl","zurück"
Set Button to -1
Set Step to 10
Endif

If Step == 10
    Set Button to GetButtonPressed

        If Button == 0 && ( Player.GetItemCount OreNugget <= 3 )
            MessageBox "Ihr besitzt nicht genug Rohmaterial!"
            Set Step to -10

        ElseIf Button == 0 && ( Player.GetItemCount OreNugget >= 4 )
            Player.RemoveItem OreNugget 4
            Player.AddItem WeapIronDaggerSA 1
            Set Step to -10
	endif

    	If Button == 1 && ( Player.GetItemCount OreNugget <= 1 ) && ( Player.GetItemCount Gem0GoldNugget <= 1 )
            MessageBox "Ihr besitzt nicht genug Rohmaterial!"
            Set Step to -10
    	ElseIf Button == 1 && ( Player.GetItemCount OreNugget >= 2 ) && ( Player.GetItemCount Gem0GoldNugget >= 2 )
            Player.RemoveItem OreNugget 2
            Player.RemoveItem Gem0GoldNugget 2
            Player.AddItem WeapIronDaggerFineSA 1
            Set Step to -10
	endif


    	If Button == 2 && ( Player.GetItemCount OreNugget <= 1 ) || ( Player.GetItemCount Gem0SilverNugget <= 1 )
            MessageBox "Ihr besitzt nicht genug Rohmaterial!"
            Set Step to -10

    	ElseIf Button == 2 && ( Player.GetItemCount OreNugget >= 2 ) && ( Player.GetItemCount Gem0SilverNugget >= 2 )
            Player.RemoveItem OreNugget 2
            Player.RemoveItem Gem0SilverNugget 2
            Player.AddItem WeapSteelDaggerSA 1
            Set Step to -10
	endif

    	If Button == 3 && ( Player.GetItemCount OreNugget <= 1 ) || ( Player.GetItemCount Gem0SilverNugget == 0 ) || ( Player.GetItemCount Gem0GoldNugget == 0 )
            MessageBox "Ihr besitzt nicht genug Rohmaterial!"
            Set Step to -10

    	ElseIf Button == 3 && ( Player.GetItemCount OreNugget >=2 ) && ( Player.GetItemCount Gem0SilverNugget >= 1 ) && ( Player.GetItemCount Gem0GoldNugget >= 1 )
            Player.RemoveItem OreNugget 2
            Player.RemoveItem Gem0SilverNugget 1
            Player.RemoveItem Gem0GoldNugget 1
           Player.AddItem WeapSteelDaggerFineSA 1
            Set Step to -10
	endif
	
	If Button == 4
            Set Step to -10
    	EndIf
end

Oblivion hat manchmal was Scripts angeht leider so seine Ticks, da muss man immer alles doppelt und dreifach machen damit es geht.

Geht nicht... Ich verzweifle noch :cry:

Aber danke für die umfangreiche Hilfe!

Das wird auch so leider nicht klappen, da du nicht abfragen kannst, ob der Spieler grade auf etwas klickt... ich habe lieder keine Zeit den Rest zu lesen, aber du könntest noch OnEquip versuchen.
 
Funktioniert dieser script?

Code:
scn dolchschlagscript

begin onHit

if player.getequipped ApostleDagger

    set dolchschlag to +1

elseif player.getequipped ApostleDaggerlvl8


    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl11



    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl14


    
    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl17



    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl20


    
    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl23


    
    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl26
    

    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl29


    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl32


    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl35



    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl38



    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl41

    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl44

    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl47

    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl50

    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl53


    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl56


    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl59



    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl62

    

    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl65


    set dolchschlag to +1
elseif    player.getequipped ApostleDaggerlvl68



    set dolchschlag to +1
elseif    player.getequipped ApostleDaggerlvl71



    set dolchschlag to +1
elseif

    player.getequipped ApostleDaggerlvl74

    set dolchschlag to +1
elseif    player.getequipped ApostleDaggerlvl77



    set dolchschlag to +1
elseif    player.getequipped ApostleDaggerlvl80

    set dolchschlag to +1
elseif    player.getequipped ApostleDaggerlvl83



    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl86



    set dolchschlag to +1
elseif    player.getequipped ApostleDaggerlvl89



    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl92



    set dolchschlag to +1
elseif player.getequipped ApostleDaggerlvl95



    set dolchschlag to +1
elseif    player.getequipped ApostleDaggerlvl98



    set dolchschlag to +1
elseif    player.getequipped ApostleDaggerlvl100



    set dolchschlag to +1
    elseif player.getequipped CGIronDagger
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl8
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl11
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl14
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl17
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl20
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl23
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl26
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl29
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl32
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl35
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl38
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl41
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl44
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl47
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl50
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl53
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl56
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl59
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl62
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl65
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl68
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl71
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl74
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl77
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl80
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl83
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl86
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl89
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl92
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl95
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl98
        set dolchschlag +1

    elseif player.getequipped CGIronDaggerlvl100
        set dolchschlag +1
endif
end
 
Nimm doch einfach ein paar Leerzeilen raus... :roll:
Der Befehl zum setzen einer Variable lautet "set x to y", das heißt, du musst schreiben: "set dolchschlag to dolchschlag + 1". Außerdem muss die Variable noch deklariert werden (es sei denn, es ist eine Globale).
Aber der Sinn des Skripts erschließt sich mir nicht ganz... Wenn "dolchschlag" sowieso immer erhöht wird, wieso fragst du dann ab, welches Item der Player ausgerüstet hat? Ich würde außerdem "Begin onHit" noch spezieller formulieren, zum Beispiel: "Begin onHit player".
 
  • Like
Reaktionen: death-lord