Construction Set Skriptthread zum Construction Set

Hallo,

bräuchte mal ein Skript das dafür sorgt das ich eine bestimmte Waffe im Inventar erst mit einen bestimmten Level und Stärke anlegen kann.

mfg
Sammael
 
Code:
ScribtName [SkriptName]

Begin OnEquip

if player.getlevel >= [Level]
     equip
endif

End
[...] nach belieben befüllen
und das Script auf die Waffe
 
Hey, habe noch eine frage und zwar möchte ich wenn ich ein bestimmtes Item anlege das sich meine Zweihänder Animation ändert. Es gibt ja mods wo man sich eine bestimmte Kampfanimation aussuchen kann.
Sozusagen das diese aus den Ordner "SpecialAnims" kommt.

mfg
Sammael
 
Zuletzt bearbeitet:
Ich habe es selbst ausprobiert...
Du musst den Block im GameMode jeden Frame ausführen, hast du es getan? Und natürlich Parameter mit übergeben, also zB. rotate x, 90
 
Habe es eben schnell selbst getestet und bei mir klappts perfekt. Schreibe bitte mal deinen Code hier rein, ich befürchte nämlich, dass du ein return im GameMode hast oder der Scriptteil aus einem anderen Grund nicht jeden Frame ausgeführt wird. Am Befehl selbst liegt es auf jeden Fall nicht.
 
Code:
ScriptName CirclingAroundThePlayerScript

short constantsset ; did we set the constants?

float rspeed ; in degrees/s
float hdist ; horizontal distance from the player
float rpos ; position on the circle
float mod_x ; positions relative to the player
float mod_y
float mod_z
float org_x ; position of the player
float org_y
float org_z
float ang_x ; rotation of the dagger
float ang_y
float ang_z

Begin GameMode

    ; setting up constants
    if constantsset == 0
        set rspeed       to  10 ; constant radial speed
        set mod_z        to 110 ; constant height
        set hdist        to 50 ; constant distance
        set constantsset to   1 ; done setting up the constants
    endif

    ; updating the position on the circle (rpos)
    set rpos to rpos + ( rspeed * getSecondsPassed )
    if rpos > 360
        set rpos to rpos - 360
    endif

    ; setting the mods, via the SinCosTan function
    set f.fin1 to rpos
    setStage f 15                ; SinCosTan(rpos) function call
    set mod_x to f.fout  * hdist ; sin(rpos) * hdist
    set mod_y to f.fout2 * hdist ; cos(rpos) * hdist

    ; getting the player's position
    set org_x to player.getPos X
    set org_y to player.getPos Y
    set org_z to player.getPos Z

    ; setting my own position
    set org_x to org_x + mod_x
    setPos X, org_x
    set org_y to org_y + mod_y
    setPos Y, org_y
    set org_z to org_z + mod_z
    setPos Z, org_z

    ; setting my own z-Angle
    set ang_z to rpos + 90
    setAngle z ang_z

    ; setting my own y-rotation
    ;set ang_y to ang_y + (rspeed * getSecondsPassed)
    rotate y 90

    ; setting my own x-rotation
    ;set ang_x to ang_x + (rspeed * getSecondsPassed)
    ;rotate x ang_x

End
ich habs auch schon mit Variable, mit und ohne Komma vor dem Parameter,... versucht. Alles mit dem selben Ergebnis: nichts!

edit: und es beißt sich nicht mit dem setAngle darüber.
 
Zuletzt bearbeitet:
0_0

Das grenz an Unmöglichkeit... Ich würde versuchen, den setangle z rauszunehmen und es damit zu testen, obwohl das eigentlich nicht der grund sein kann. Oder du setzt man rotate y 90 ganz oben an den Script, nur um zu schauen, ob es was ändert, also direkt unter den GameMode. Ansonsten weiß ich auch nicht weiter, weil der Script so richtig ist. Vielleicht rührt der Fehler auch irgendwie aus der Math Library, auch wenn ich mir das schwer vorstellen kann.
 
  • Like
Reaktionen: Schmelz
setangle z: steht doch oben, bring nix
Math Library: Hat noch keine Probleme gemacht und ist für diesen Teil vollkommen irrelevant...
nach oben setzen versuch ich Morgen

edit: auch das ändert nichts...
 
Zuletzt bearbeitet:
auch diese Version bewirkt nichts! (also der betroffene Teil)

Code:
ScriptName CirclingAroundThePlayerScript

short constantsset ; did we set the constants?

float rspeed ; in degrees/s
float hdist ; horizontal distance from the player
float rpos ; position on the circle
float mod_x ; positions relative to the player
float mod_y
float mod_z
float org_x ; position of the player
float org_y
float org_z
float ang_x ; rotation of the dagger
float ang_y
float ang_z

Begin GameMode

    ; setting up constants
    if constantsset == 0
        set rspeed       to  10 ; constant radial speed
        set mod_z        to 110 ; constant height
        set hdist        to 50 ; constant distance
        set constantsset to   1 ; done setting up the constants
    endif

    ; updating the position on the circle (rpos)
    set rpos to rpos + ( rspeed * getSecondsPassed )
    if rpos > 360
        set rpos to rpos - 360
    endif

    ; setting the mods, via the SinCosTan function
    set f.fin1 to rpos
    setStage f 15                ; SinCosTan(rpos) function call
    set mod_x to f.fout  * hdist ; sin(rpos) * hdist
    set mod_y to f.fout2 * hdist ; cos(rpos) * hdist

    ; getting the player's position
    set org_x to player.getPos X
    set org_y to player.getPos Y
    set org_z to player.getPos Z

    ; setting my own position
    set org_x to org_x + mod_x
    setPos X, org_x
    set org_y to org_y + mod_y
    setPos Y, org_y
    set org_z to org_z + mod_z
    setPos Z, org_z

    ; setting my own z-Angle
    set ang_z to rpos + 90
    setAngle z ang_z

    ; setting my own y-rotation
    set ang_y to rspeed * getSecondsPassed * f.fout2
    setAngle y ang_y

    ; setting my own x-rotation
    set ang_x to rspeed * getSecondsPassed * f.fout
    setAngle x ang_x

End
auch wenn ich x oder y auskommentiere, ergibt sich kein Unterschied!
 
Wolltest du nicht "rotate" benutzen?

Ich vermute, dass dort schon etwas passiert, aber du die Rotation einfach nicht erkennst. Du setzt den Winkel schließlich immer wieder neu auf das Produkt von 10*getSecondsPassed*Sinus bzw. Kosinus. Sinus und Kosinus sollten betragsmäßig nicht größer als 1 werden und wenn man davon ausgeht, dass dein PC keine 10 Jahre alt ist, gibt "getSecondsPassed" immer einen verdammt kleinen Wert zurück, sodass der Winkel maximal bei 0,5 liegt (bei 20 FPS). Du solltest die Zeilen also eher so schreiben:

Code:
set ang_x to [B]ang_x +[/B] rspeed*getSecondsPassed*f.fout
setAngle x ang_x

Btw. würde ich, wenn du "getSecondsPassed" öfter als einmal pro Frame benutzt, diesen einmal in einer Variable speichern. Dass sollte ein wenig bisschen an der Performance sparen.
 
  • Like
Reaktionen: Schmelz
getSecondsPassed kann man doch außenvor lassen. Mehr Fraps -> kleine Änderung, aber öfter. Weniger Fraps -> große Änderung, aber selten.
also sollten wir auf eine Änderung von maximal 10 Grad pro Sekunde haben, und die hätte ich gesehen.

edit: ja ich wollte mit rotate arbeiten, aber das schien ja nichts zu bewirken. Und ich meine das ich durch Sinus und Cosinus auch zu dieser rotation kommen sollte...
 
getSecondsPassed kann man doch außenvor lassen. Mehr Fraps -> kleine Änderung, aber öfter. Weniger Fraps -> große Änderung, aber selten.
also sollten wir auf eine Änderung von maximal 10 Grad pro Sekunde haben, und die hätte ich gesehen.

Deswegen ja mein Änderungsvorschlag. Bei deinem Skript würde es jeden Frame neugesetzt. Ungeachtet dessen, wie groß der Winkel vorher war. Bei 20 FPS (-> getSecondsPassed = 0.05) erhält man also -0.5° <= 10*0.05*Sinus = ang_x <= 0.5°. Und dieser Wert wird nicht zum vorherigen addiert, sondern ersetzt diesen, sodass der Winkel zwischen -0.5° und 0.5° variiert.

edit: ja ich wollte mit rotate arbeiten, aber das schien ja nichts zu bewirken. Und ich meine das ich durch Sinus und Cosinus auch zu dieser rotation kommen sollte...

Ich glaube zwar nicht, dass dieser kleine Zusatz dafür ausreicht, aber das sollte sowieso eher irrelevant sein. Schließlich geht es ja nur um eine kontinuierliche (gleichmäßige?) Rotation.
 
  • Like
Reaktionen: Schmelz
jetzt hab ich's verstanden
wird ausprobiert...

edit: schön jetzt tut sich was! nur das Verhältniss sin-cos (oder cos-sin) passt noch nicht ganz... (es kommt der Sache aber schon beträchtlich näher)
 
Zuletzt bearbeitet:
Hi, ich brauch hilfe bei nem script.

Es soll bewirken, dass wenn ich einen bestimmten trank trinke ein objekt in mein inventar kommt.

bisher hab ich das:

scn MagicStuffScript

begin ScriptEffectStart

player.additem Zauberstab001 1

end

irgendwie funzt das wefer mit oneqip noch mit scripteffectstart

pls hlp me