Construction Set Skriptthread zum Construction Set

Tja, die Kür muss ja nicht perfekt sein^^
ich hatte die Sprunganimation replaced, drum sah es ned so schlecht aus... könntest du mir die Anwendung von der Sprunganimation nochmal erklären? Und kann ich sie da auch nahc vorne springen lassen(damit sie auf den Tisch springt) oder muss ich da SetPos benutzen? Danke schonmal für den Anfang!
LG
Dacri
 
Problem mit Geheimtür

Also, da ich neu im Forum bin, werf icherstmal jedem ein freundliches Hallo zu und komme dann zu meinem Problem;):

Ich habe heute einen Script für eine Geheimtür mit Schalter geschrieben (Na ja, eigentlich hab ich sie kopiert und nach meinen Wünschen verändert :roll:).
Auf jeden Fall funktioniert es bis dahin ganz gut und der Bücherschrank, den ich nehme bewegt sich auch brav beim Umlegen des Schalters in die gewünscht Richtung. Aber jetzt kommt der Haken: Der Platz, wo vorher der Schrank war ist zwar leer aber ich kann dort trotzdem nicht durgehen. Es ist, als ob es eine unsichtbare Barriere gebe:huh:. Könnte mir vielleicht jemand helfen? Wäre super nett. Ich kenn mich mit Scripten nämlich nicht ganz so toll aus.:? Hier sind die beiden Scripts:

Der Schalter Script:

scn DuGGeheimschalter1Script

short open
ref par
ref myself

begin onActivate

if open == 0
playgroup forward 1
DuGSecretBookshelfREF.playgroup forward 0
set open to 0
set par to getparentref
set myself to getself
par.activate myself 1
endif

end


Der Script für den sich bewegenden Schrank:

scn DuGGeheimtür1Script

short activated
float locx
float locy
float locz
float stopx
float stopy
float stopz
float stopxb
float stopyb
float stopzb
float speedx
float speedy
float speedz
short wayx
short wayy
short wayz
ref myself

Begin OnActivate
if activated == 0
set myself to getself
set stopx to myself.getpos x - 140
set stopy to myself.getpos y + 0
set stopz to myself.getpos z + 0
set stopxb to myself.getpos x
set stopyb to myself.getpos y
set stopzb to myself.getpos z
set speedx to -1.5
set speedy to 0
set speedz to 0
If stopx > myself.getpos x
set wayx to 1
Elseif stopx < myself.getpos x
set wayx to -1
Endif
If stopy > myself.getpos y
set wayy to 1
Elseif stopy < myself.getpos y
set wayy to -1
Endif
If stopz > myself.getpos z
set wayz to 1
Elseif stopz < myself.getpos z
set wayz to -1
Endif
set activated to 1
Elseif (activated == 1)
set activated to 2
Elseif (activated == 2)
set activated to 1
Endif
End

Begin GameMode
if activated == 0
return
Elseif activated == 1
set locx to myself.getpos x + speedx
set locy to myself.getpos y + speedy
set locz to myself.getpos z + speedz
If (wayx == 1) && (locx < stopx)
myself.setpos x locx
Elseif (wayx == -1) && (locx > stopx)
myself.setpos x locx
Endif
If (wayy == 1) && (locy < stopy)
myself.setpos y locy
Elseif (wayy == -1) && (locy > stopy)
myself.setpos y locy
Endif
If (wayz == 1) && (locz < stopz)
myself.setpos z locz
Elseif (wayz == -1) && (locz > stopz)
myself.setpos z locz
Endif
Elseif activated == 2
set locx to myself.getpos x - speedx
set locy to myself.getpos y - speedy
set locz to myself.getpos z - speedz
If (wayx == 1) && (locx > stopxb)
myself.setpos x locx
Elseif (wayx == -1) && (locx < stopxb)
myself.setpos x locx
Endif
If (wayy == 1) && (locy > stopyb)
myself.setpos y locy
Elseif (wayy == -1) && (locy < stopyb)
myself.setpos y locy
Endif
If (wayz == 1) && (locz > stopzb)
myself.setpos z locz
Elseif (wayz == -1) && (locz < stopzb)
myself.setpos z locz
Endif
Endif
End

Es wäre supernett, wenn mir jemand helfen könnte:-D

 
Hallo Parael!
Beim Bewegen des Schrankes wird, wie eigentlich bei fast allen "WorldObjects" (Statics, Activators, Doors, Containers, etc.), zwar das Objekt (der Schrank) nicht aber dessen Kollision bewegt. Du kannst also nicht durch die Stelle, an der der Schrank stand durchlaufen und ebenso wenig wird der Schrank ein Hindernis abgeben. Das kannst du zum einen mit einem Dreh an der Kollision in der Mesh selbst lösen (weiß nicht wie, wurde aber irgendwo im Forum schon mal erklärt; kannst ja mal suchen :ugly: ) oder aber du "zwingst" die Kollision mittels Skript dazu, sich zu aktualisieren. Dafür musst du den Schrank einmal für einen Frame disablen und danach wieder enablen (im CS-Wiki werden zwar auch andere alternative Wege vorgeschlagen, die habe ich aber noch nicht selbst getestet und für den Anfang tut es diese Methode auch). Da dein Skript so aussieht als verstündest du was davon, erspare ich mir jetzt genauere Erläuterungen.
Du kannst übrigens das "mySelf" im Schrank-Skript vor den "getPos"- und "setPos"-Befehlen weglassen.


@Dacri: Ich habe ehrlich gesagt keine Ahnung, obwohl ich bezweifle, dass der NPC dabei nach vorne springt. Vielleicht tut er das, wenn er gleichzeitig ein Package ausführt, was ihn sich bewegen lässt. Aber wie gesagt, das ist reine Spekulation.
 
  • Like
Reaktionen: Parael
trotzdem danke...vielleicht mache ich es auch einfach per script teleport. nur noch eine Frage: das PlayGroup, spielt das eine Animation ab, oder was bewirkt das?
 
Nicht ganz. Es lässt den NPC eine "Animationsgruppe" abspielen und wenn sich mehrere Animationen dort drin befinden, wird daraus eine ausgesucht. Wenn du also "player.playGroup AttackPower" benutzt wird abhängig von der Waffe und der Körperhaltung eine Animation rausgesucht. Es gibt ja verschiedene Angriffsanimationen. Die Animationen kannst du dir im NPC-Objektfenster im "Animation"-Tab ansehen. Da steht auch, wie lange eine solche Animation für einmaliges Abspielen dauert.
Im Endeffekt kommt es also auf das gleiche heraus.
 
  • Like
Reaktionen: Dacri
Danke Diarrhoe,
ich werde versuchen das so schnell wie möglich umzusetzen :)
Und nochmal ein dickes Danke für die schnelle Antwort:-D 'schleim';):D
Edit: Ich kenn mich eigentlich nich wirklich gut mit dem Scripten aus, aber ich versuche zu lernen (=
Na ja, nich dass du denkst, ich wärn Profi. Wiegesagt, ich hab den Script nur kopiert u. nach meinen Wünschen geändert ;D
 
Zuletzt bearbeitet:
Ok, ich habe jetzt einen Animationsmod heruntergeladen und getestet und mir die Animationen ausgesucht, die ich abspielen lassen will. Muss ich in dem Script nun den namen (also den ganz normalen namen im ordner der animationen) bei playgroup schreiben, oder muss ich da noch etwas erstellen? Ich habe schon bei den Scripts des Mods gesucht, aber nichts gefunden:(
LG
Dacri
 
Hi,
tschuldigung fürs Dazwischenreden, ich habe nur eine kurze Frage.
Ich habe hier ein Script für eine Fackel aus dem CS.
Code:
scn GenericFireDamageLow01SCRIPT

float fireTimer
short activated


begin onTrigger Player
    if activated == 0
        cast TRAPGenericFireDamageLow01 Player
        set activated to 1
        set fireTimer to 3
    endif
end

begin gameMode

    if activated == 1
        if fireTimer > 0
            set fireTimer to fireTimer - getSecondsPassed
        endif

        if fireTimer <= 0
            set activated to 0
        endif
    endif
end

Ist das ein Script was steuert zu welcher Zeit die Fackel an ist oder was macht das?
 
Sicher, dass das Skript auf einer Fackkel liegt? Sieht eher so aus wie bei einem Lagerfeuer. Und dann sorgt es dafür, dass der Spieler beim Kontakt mit dem Feuer Schaden hinzugefügt bekommt.

@Dacri: Animationsmods verändern doch gewöhnlich nur die Animationsdateien selbst. Die Animationsgruppen sollten also eigentlich gleich bleiben.
 
naja, ich habe mich wohl etwas ungeschickt ausgedrückt...es handelt sich um einen Dance-Mod, da sie ja tanzen soll. Es ist eine Ressource und ich will einige der Animationen einbauen. Deshalb muss ich die Animationen ja neu erstellen...aber ich weiß nicht wie.
Allerdings denke ich mir gerade, dass das vielleicht jetzt nichtmehr so ganz in den Scriptthread passt...Werde mal woanders fragen.
LG
Dacri
 
Zuletzt bearbeitet:
Und dann benötigt das "elseif" noch eine Bedingung, man kann also gleich "else" benutzen, und "disable" und "enable" schreibt man hinter die Referenz, soll heißen "<Ref>.disable" bzw. "<Ref>.enable".
Das ganze sieht dann so aus (noch erweitert. um es etwas performancefreundlicher zu halten):
Code:
scn name
 
short doonce
short disabled
 
Begin onLoad
 
if doonce == 0
 set doonce to 1
 set disabled to getDisabled
endif
 
end
 
 
Begin GameMode
 
if disabled
 if GameHour >= 6 && GameHour < 18
  set disabled to 0
  enable
 endif
else
 if GameHour < 6 || GameHour >= 18
  set disabled to 1
  disable
 endif
endif
 
end

Das sollte auch dir helfen.

LG
Dacri
 
Hallo, ich bin es wieder und ich habe wieder ein Problem :roll:
Also, ich habe folgendes Script erstellt, um zu bewirken, dass sich die Tür auf der das Script liegt bei erreichen der Quesstage abschließt. Aber es funktioniert nicht! :?:Könnte mir vielleicht jemand helfen? Wäre Supernett!!!

Hier das Script für die Tür:

scn DuGTuer1Script

Begin GameMode

if getstage DuG 50
DuGTuer1REF.GetLockLevel 100

endif
end
Schonmal DANKE
:D
 
"DuGTuer1REF.GetLockLevel 100" ist falsch!
Der Befehl zum Abschließen lautet einfach "Ref.lock X" Da das Script aber sowieso auf der Tür liegt, kannst du die REF sogar weglassen. Ersetze die Zeile also einfach durch "Lock 100"
Edit: Zu langsam :(