Construction Set Skriptthread zum Construction Set

Warum schreibst du dann nicht die 2. MessageBox im entsprechenden "If Button"?

Also so:

Code:
Short Button
 
Message "Bla" (Auswahlmoeglichkeiten)
 
set Button to GetButtonPressed
 
If Button == X
        MessageBox "Bla"
 
  ...
 
 
    Endif
 
Weiß jemand, wo ich den Script finden kann, welchen den Grummits und Baliwogs aus SI die Regeneration bei Regen einschaltet?
Was muss man ändern, damit bei einem Gewitter / bei Sonnenschein ein Effekt hinzugefügt wird?

:bye:
 
Zum ersten:
SEABGrummiteXScript

Da gibts ein paar, liegen auf unterschiedlichen Grummittypen.

zum zweiten:
Nun, du musst die Conditions ändern.
die Abfrage ist IsSwimming und IsRaining. Ich habe allerdings nur noch die Abfragen IsSnowing und IsCloudy gefunden.

Direkt auf Sonnenschein oder Gewitter gibts keine Abfrage, wenn ich das richtig sehe.
Möglicherweise kannst du mit GetWindSpeed was werden.
 
Hmm, wüsste ich jetzt nicht.
Es gibt 5 Operatoren, /,*,-,+ und % (modulo). Du kannst du Potenz höchstens ausschreiben durch x*x*x*x...
 
@Knochenkeule: Kann ich net, da der Exponent ne Variable ist.
@Diarrhoe: Hört sich gut an und hat auch funktioniert ! Danke

Noch eine Frage: (Warum ich das brauche ist hier nach zu lesen: http://www.scharesoft.de/joomla/forum/showthread.php?t=34515
Ich würde gerne immer, wenn der Spieler seine Ausrüstung (Rüstung, Klamotten, Umhang,....) ändert ein Script laufen lassen. Wie lässt sich das bewerkstelligen ?
 
Zuletzt bearbeitet:
Noch eine Frage: (Warum ich das brauche ist hier nach zu lesen: http://www.scharesoft.de/joomla/foru...ad.php?t=34515
Ich würde gerne immer, wenn der Spieler seine Ausrüstung (Rüstung, Klamotten, Umhang,....) ändert ein Script laufen lassen. Wie lässt sich das bewerkstelligen ?

Ich habe mir deinen Thread durchgelesen.

Kannst du nicht einfach den Script "begin gamemode" laufen lassen? Um Ressourcen des PC nicht zu überreizen kannst du z.B. fragen, ob der (gespeicherte) Soll-Wert noch im +-4%-Bereich des Ist-Wertes liegt. Wenn nicht, berechnest du ihn neu.
Aber natürlich immer noch nicht optimal... Du könntest auch einen Timer laufen lassen und alle 10s prüfen...

Könntest du dein Script mal posten? Würd mich mal interessieren...
Übrigends finde ich die Idee echt super. Wird wohl ein Must-Have Mod.
 
Machs mal so:

(ist ein Quest-Skript und benoetigt OBSE)

Code:
SCN ...
 
Ref Upper
Ref Lower
 
; und so weiter
 
Short UpperVar
Short LowerVar
 
; und so weiter
 
Short Step
 
Float fQuestDelayTime
 
 
Begin GameMode
 
If fQuestDelayTime != 0.001
        set fQuestDelayTime to 0.001
        set Step to 1
 
    Endif
 
If Step == 1
        set Upper to Player.GetEquippedObject 2
        set UpperVar to 1
        set Lower to Player.GetEquippedObject 3
        set LowerVar to 1
        ; und so weiter
 
 
    Endif
 
If Player.UnEquip Upper == 1 && Upper == 1
        set Upper to 2
 
ElseIf Player.UnEquip Lower == 1 && Lower == 1
       set Lower to 2
 
; und so weiter
 
 
    Endif
 
 
 
End

(Fuer weitere Teile schaust du hier)
Dann machst du ein 2. Quest-Skript, also das Script, welches ausgeloest werden soll:

Code:
SCN ...
 
Float fQuestDelayTime
 
Begin GameMode
 
set fQuestDelayTime to 0.001
 
If <Quest-ID-Des 1.Skripts>.Upper == 2
        ; Do Stuff / Das, was gemacht werden soll
        set <Quest-ID-Des 1.Skripts>.Upper to 0
 
ElseIf <Quest-ID-Des 1.Skripts>.Lower == 2
        ; Do Stuff / Das, was gemacht werden soll
        set <Quest-ID-Des 1.Skripts>.Lower to 0
 
; und so weiter
 
 
    Endif
 
 
 
End


mfg
Kahmul
 
  • Like
Reaktionen: Hansebenger
@Tach810i: Um die Werte zu vergleichen, müsste man sie erstmal ausrechnen. Und genau das ist das Rechenintensive an meinem Skript.

@Kahmul: Kann ich das Script einfach laufen lassen, wenn der Spieler das Inventar verlässt ? Geht das irgendwie ? Dann muss ich mich nämlich nicht mit dem GetEquipppedObject rumschlagen.

So hier mein Skript:
Code:
ScriptName NonLameResistances

long x
float y
float Norm
float z
long w
Begin OnEquip

player.ModActorValueC 52 500
set Norm to 20
set z to 1-Norm/100
set y to ((player.GetActorValueC 52)/Norm)
set x to -(player.GetActorValueC 52)+100-100*(pow z y)
player.ModActorValueC 52 x
set w to (player.GetActorValueC 52)
Message "Zauberabsorbtion: %.0f", w, 10

player.ModActorValueC 53 500
set Norm to 20
set z to 1-Norm/100
set y to ((player.GetActorValueC 53)/Norm)
set x to -(player.GetActorValueC 53)+100-100*(pow z y)
player.ModActorValueC 53 x
set w to (player.GetActorValueC 53)
Message "Zauberreflektion: %.0f", w, 10

player.ModActorValueC 59 500
set Norm to 20
set z to 1-Norm/100
set y to ((player.GetActorValueC 59)/Norm)
set x to -(player.GetActorValueC 59)+100-100*(pow z y)
player.ModActorValueC 59 x
set w to (player.GetActorValueC 59)
Message "Schadensreflektion: %.0f", w, 10

player.ModActorValueC 61 500
set w to (player.GetActorValueC 61)
if (w>0)
set Norm to 40
set z to 1-Norm/100
set y to ((player.GetActorValueC 61)/Norm)
set x to -(player.GetActorValueC 61)+100-100*(pow z y)
player.ModActorValueC 61 x
Message "Berechnet: %.0f", x, 10
set w to (player.GetActorValueC 61)
Message "Feuerresistenz: %.0f", w, 10
endif

player.ModActorValueC 62 500
set w to (player.GetActorValueC 62)
if (w>0)
set Norm to 40
set z to 1-Norm/100
set y to ((player.GetActorValueC 62)/Norm)
set x to -(player.GetActorValueC 62)+100-100*(pow z y)
player.ModActorValueC 62 x
set w to (player.GetActorValueC 62)
Message "Frostresistenz: %.0f", w, 10
endif

player.ModActorValueC 64 500
set w to (player.GetActorValueC 64)
if (w>0)
set Norm to 20
set z to 1-Norm/100
set y to ((player.GetActorValueC 64)/Norm)
set x to -(player.GetActorValueC 64)+100-100*(pow z y)
player.ModActorValueC 64 x
set w to (player.GetActorValueC 64)
Message "Magieresistenz: %.0f", w, 10
Endif

player.ModActorValueC 68 500
set w to (player.GetActorValueC 68)
if (w>0)
set Norm to 40
set z to 1-Norm/100
set y to ((player.GetActorValueC 68)/Norm)
set x to -(player.GetActorValueC 68)+100-100*(pow z y)
player.ModActorValueC 68 x
set w to (player.GetActorValueC 68)
Message "Schockresistenz: %.0f", w, 10
Endif

player.ModActorValueC 65 500
set w to (player.GetActorValueC 65)
if (w>0)
set Norm to 20
set z to 1-Norm/100
set y to ((player.GetActorValueC 65)/Norm)
set x to -(player.GetActorValueC 65)+100-100*(pow z y)
player.ModActorValueC 65 x
set w to (player.GetActorValueC 65)
Message "Waffenresistenz: %.0f", w, 10
EndIf

end
Zur Erklärung: Mein Skript läuft, sobald man einen bestimmten Gegenstand ausrüstet (Ich habs bei mir auf Dietriche gelegt).
Ist eine Resistenz größer 0 wird sie abgeschwächt: Je höher die Resistenz, desto verheerender die Abschwächung.
Zur Veranschaulichung: Alle Werte in %. Nach rechts abgetragen (X-Achse) ist der Magiewiderstand, den Oblivion anzeigt. Rot ist der Schaden, den man in Oblivion normalerweise davonträgt. Blau ist der Schaden den man durch dieses Skript erhält, abzulesen an der Y-Achse.

Ich fand es sinnvoll folgende Resistenzen abzuschwächen:
52: SpellAbsorbChance
53: SpellReflectChance
59: ReflectDamage
61: ResistFire
62: ResistFrost
64: ResistMagic
68: ResistShock
65: ResistNormalWeapons

Ich wollte noch sagen, dass ich davor noch nie ein Script geschrieben habe und deshalb außer von den 5 verwendeten Funktionen nicht viel Ahnung im Scripten habe;)
 

Anhänge

  • Veranschaulichung.jpg
    Veranschaulichung.jpg
    12,8 KB · Aufrufe: 78
Zuletzt bearbeitet:
Hallo, ich habe dann auch noch eine kleine Frage. Kürzlich habe ich nach einem Script gesucht, das einen beim Laden eines jeglichen Spielstandes zu einem bestimmten Marker teleportiert.
Das sah so aus:

scn 000MinenTeleport

short once

begin GameMode
if (once == 0)
set once to 1
stopquest 00Erwachen
player.moveto Durinmarker
endif
end

Das hat auch funktioniert, nur leider werde ich JEDES Mal zum Marker teleportiert, wenn ich einen Spielstand lade. Das soll natürlich nicht passieren. Kann man scripten, dass das nur EINmal passiert? Und zwar beim ersten Laden eines Spielstandes, und danach nicht noch einmal?

Mit freundlichen Grüßen,

MadHatter :)
 
Hallo, ich habe dann auch noch eine kleine Frage. Kürzlich habe ich nach einem Script gesucht, das einen beim Laden eines jeglichen Spielstandes zu einem bestimmten Marker teleportiert.
Das sah so aus:

scn 000MinenTeleport

short once

begin GameMode
if (once == 0)
set once to 1
stopquest 00Erwachen
player.moveto Durinmarker
endif
end

Das hat auch funktioniert, nur leider werde ich JEDES Mal zum Marker teleportiert, wenn ich einen Spielstand lade. Das soll natürlich nicht passieren. Kann man scripten, dass das nur EINmal passiert? Und zwar beim ersten Laden eines Spielstandes, und danach nicht noch einmal?

Mit freundlichen Grüßen,

MadHatter :)

Auf einer Quest liegt das ja wohl schon, hatte ich ja so geschrieben.
Lass mal die Zeile mit stopquest weg.
 
Am besten machst du es so das durch die erste Teleportation eine Queststage erhöht wird .

Vorher schreibst du noch in den Skript das er eine bestimmte Stage benötigt die er beim 2. laden Dann aber nicht mehr hat.

Hoffe das passt ...
 
@ Hansebenger:

Ein Befehl, der ablaeuft, sobald man das Inventar verlaesst, ist mir nicht bekannt.

Willst du das Skript auf einem bestimmten Gegenstand ablaufen lassen oder auf allen, die ausruestbar sind? Wenn ja, dann kommst du um "GetEquippedObject" nicht herum.

mfg
Kahmul
 
Du überprüfst mit GetMenuMode ob der Spieler im Inventar ist, setzt eine Variable rauf und fragst dann ab, ob der menuMode nicht mehr das Inventar ist. Dann weißt du das er das Inventar geschlossen hat.

GetMenuMode findest du beim CS Wiki.
 
Wenn du 100*0,75^0,05x statt 100*0,8^0,05x rechnest, ist insgesamt etwas mehr drin:

mit 0,8: Spieler hat bspw. 200% Wiederstehen -> 89,3% Wiederstehen
mit 0,8: 100% -> 67,23%
mit 0,75: 200% -> 94,37%
mit 0,75: 100% -> 76,27%

Hat der Spieler unter ca 50% Wiederstehen, ist der Gesamtwert allerdings leider etwas höher als ohne dein PlugIn (nur minimal).

Sonst fände ich es nur schade, dass man mehr als 200% Widerstand braucht, um daraus einen Wert über der 90er%-Grenze errechnet zu bekommen.
 
@Kahmul, SirTroy: Das mit dem "Wenn Spieler die Ausrüstung ändert" lasse ich bleiben, da Resistenzen ja auch durch Zauber verändert werden, es wäre also sowieso unsinnig.
Ich denke ich werde das Skript alle 10 Sekunden laufen lassen (Natürlich ohne die Meldungen).
Ich habe mein Skript nun so aufgebaut wie dieses hier: http://cs.elderscrolls.com/constwiki/index.php/GameMode
Denkt ihr 7 pow-Funktionen alle 10 Sekunden zähren sehr an der Performance ? Zusätzlich lege ich das Skript mit den Meldungen auf den Dietrich, damit man immer nachgucken kann wie resistent man gerade ist.

@Tach810i: 100*0,75^0,05x statt 100*0,8^0,05x zu nehmen widerspricht der Logik, die hinter dieser Formel steckt: Ich nehme an, Ich hätte Ausrüstungsteile mit 20% Resistenz (100%-20%=0,8 ) und habe so viele Teile, dass ich insgesamt auf die Vanilla-Resistenz komme: x%/20%=0,05x
Wenn ich die 0,8 zu 0,75 machen würde, sollte ich also auch die 0,05 zu 0,04 machen.

"Hat der Spieler unter ca 50% Wiederstehen, ist der Gesamtwert allerdings leider etwas höher als ohne dein PlugIn (nur minimal)."
Alle Widerstände die zu hoch wären werden nicht angewendet^^ http://cs.elderscrolls.com/constwiki/index.php/ModActorValueC

Wenn du mir sagst ab wieviel % Vanilla-Wert du 90% Resistenz haben willst, kann ich dir eine passende Formel basteln
 
Zuletzt bearbeitet:
Denkt ihr 7 pow-Funktionen alle 10 Sekunden zähren sehr an der Performance ? Zusätzlich lege ich das Skript mit den Meldungen auf den Dietrich, damit man immer nachgucken kann wie resistent man gerade ist.

K.A., also 7 Quadrate pro 10 Sekunden gehen eigentlich klar denk ich, aber vlt. Solltest du 7 Scripts machen. Jedes für eine Resistenz-Art. Dann is es besser verteilt.

Bitte, Bitte nicht der Dietrich! Soll ich den jedesmal abwerfen und aufheben???!
Mach doch "begin MenuMode" und dann noch die Nummer für Inventar-Menu dazu. Dann stehts immer, wenn man das Inventar öffnet. Alternativ mach nen Quest-Gegenstant als Item, der ne Message (oder MessageBox) erscheinen lässt.

Wegen der Formel: Klar, du hast recht! Wenn ichs mir recht überlege ist es auch gar nicht mal so schlimm, dass man erst mit 200% wirklich -> +-90% bekommt.

Genial wäre natürlich noch ein anderer Mod, der Zauberwiderspiegeln auch prozentual macht! Is aber ein anderes Ding. Mich nervt es nur immer, dass man nur 30% Chance hat den Zauber zu spiegeln, statt jeden zu 30% zu spiegeln... - irgendwie so unkontrolliert (auch wenns (wenn man sich oft treffen lässt) aufs gleiche herauskommt).

mfg tach810i
 
K.A., also 7 Quadrate pro 10 Sekunden gehen eigentlich klar denk ich, aber vlt. Solltest du 7 Scripts machen. Jedes für eine Resistenz-Art. Dann is es besser verteilt.
pow ist nicht Quadrieren. Es ist allgemein Exponieren, was sehr viiiel rechenlastiger ist.
Das Ganze auf 7 Scripts zu verteilen halte ich nicht für ressourcenschonend, da ich dann ja auch 7 Countdowntimer usw bräuchte.

Bitte, Bitte nicht der Dietrich! Soll ich den jedesmal abwerfen und aufheben???!
Mach doch "begin MenuMode" und dann noch die Nummer für Inventar-Menu dazu. Dann stehts immer, wenn man das Inventar öffnet. Alternativ mach nen Quest-Gegenstant als Item, der ne Message (oder MessageBox) erscheinen lässt.
Du musst den Dietrich nicht wegwerfen, sondern nur anklicken. Dann steht links oben "Kann nicht ausgerüstet werden" und danach kommen die ganzen Resistenzen. Ich mag es halt wenn das Script auf nem Gegenstand liegt, denn dann kann man sich die Resistenzen anzeigen lassen, wenn man sie wirklich wissen will. Vielleicht kreiere ich einfach ein "Buch der wahren Resistenzen" oder so, auf das ich das Skript lege. Ist dann halt wieder die Frage wo man das herkriegt.

Ich habe mir jetzt das "Begin gamemode" Skript gebastelt und getestet und ich meine zu bemerken, dass es alle 10 Sekunden minimal ruckelt. Ich werde das Plugin demnächst aber auch veröffentlichen, dann könnt ihr mir eure Meinung azu sagen.