PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Collision wo keine sein dürfte !?



Papi62
27.03.2010, 01:08
Grmpf, ich krieg noch nen Knoten im Gehirn. :gnah
Ich hab nun alle möglichen Collisionsfehler ausgeschlossen und trotzdem steh ich in der Luft. :auh

Geplanter und funktionierender Ablauf:

Terminal hacken und Geheimversteck aktivieren. [Terminal startet Bodenbewegung, enabled rotes Licht und Trigger]
Nun wird der Boden über dem Liftschacht leicht angehoben und zur Seite geschoben. (Gleichzeitig wird da ein rotes Licht und ein Trigger enabled.) [Trigger startet Gitterrahmen]
Danach kommt der Gitterrahmen von der Decke. [Gitterrahmen startet Aufzug]
Wenn das Gitter unten ist fährt der Aufzug nach unten.

Der Ablauf der Skripte läuft soweit perfekt aber der Boden scheint über dem Loch noch eine Collision zu haben obwohl dieses Stück Boden weit genug versetzt ist.


http://www.r-appert.ch/fallout/cnw/cnwliftfehler03_thumb.jpg (http://www.r-appert.ch/fallout/cnw/cnwliftfehler03.jpg)




Ich habe dann im Geck den Boden zur Seite geschoben (an die selbe Stelle wie es das Skript machen würde) und so ohne den Ablauf zu starten getestet.


http://www.r-appert.ch/fallout/cnw/cnwliftfehler01_thumb.jpg (http://www.r-appert.ch/fallout/cnw/cnwliftfehler01.jpg) http://www.r-appert.ch/fallout/cnw/cnwliftfehler02_thumb.jpg (http://www.r-appert.ch/fallout/cnw/cnwliftfehler02.jpg)


Seltsamerweise ist so das Loch offen. :gruebel
Am Gitter in Bild 1 liegt es nicht, das habe ich schon getestet. Es muss irgendwas mit dem Boden und seinem Skript zu tun haben, wobei das Skript des Bodens nur die Bewegung des selben beinhaltet.


scn CNWLiftschachtAbdeckungScript


short Move
short DoOnce

float ZAchsePosition
float ZAchse
float XAchsePosition
float XAchse

float Timer

;************************************************* ******

Begin GameMode

if DoOnce == 0 && Move == 1
Set ZAchsePosition to GetPos Z
Set ZAchse to ZAchsePosition +.3
SetPos Z ZAchse
endif

if DoOnce == 0 && Move == 1
if GetDistance CNWLiftAbdeckUpMarkerREF <= 10
Set DoOnce to 1
endif
endif

if DoOnce == 1 && Move == 1
Set XAchsePosition to GetPos X
Set XAchse to XAchsePosition -1
SetPos X XAchse
endif

if DoOnce == 1 && Move == 1
if GetDistance CNWLiftAbdeckOpenMarkerREF <= 10
Set Move to 0
Set DoOnce to 0
endif
endif

End

;************************************************* ******

Begin GameMode

if DoOnce == 0 && Move == 2
Set XAchsePosition to GetPos X
Set XAchse to XAchsePosition +1
SetPos X XAchse
endif

if DoOnce == 0 && Move == 2
if GetDistance CNWLiftAbdeckClosedMarkerREF <= 10
Set DoOnce to 1
endif
endif

if DoOnce == 1 && Move == 2
Set ZAchsePosition to GetPos Z
Set ZAchse to ZAchsePosition -.3
SetPos Z ZAchse
endif

if DoOnce == 1 && Move == 2
if GetDistance CNWLiftAbdeckDownMarkerREF <= 10
Set Move to 0
Set DoOnce to 0
endif
endif

End

Das "Move to 1" wird vom Terminal (Start des ganzen Ablaufes) vergeben, "Move to 2" im Moment noch gar nicht - erst mal diesen Fehler fixen.

Ok, wenn ich den Boden disable und den Startpunkt der Aufzug-Plattform im Geck ein Stückchen weiter nach unten verschiebe (wie in Bild 3 zu sehen) dann komm ich doch durch das Loch bis zur Plattform, auch mit Skript. Wenn die dann aber nach unten fährt bleib ich da stehen, liegt also auch an der besch... Plattform.
Wenn der Boden wieder Enable ist komm ich nicht mal bis zur Plattform.
Weiss jemand warum? Ich teste mal weiter. :)

Hmm, scheint ein Problem mit der Bewegung des Players zu sein.
Ich habe eine Testzelle gemacht mit einer auf- und ab-beweglichen Plattform und einem Terminal zum starten. Die Plattform bewegt sich wie sie soll aber der Player bleibt stehen, und bei der Aufwärtsbewegung geht die Plattform einfach durch den Player durch.

Seltsam, ich weiss dass es geht; denn z.B. bei Cube gibts auch Aufzüge die funktionieren mit Player, aber ich komm nicht dahinter wie.

edit alceleniel: Könntest du bitte den Ändern-Button nutzen...

Papi62
29.03.2010, 19:02
Habs nun endlich rausgefunden mit dem Lift-Gedönse. :)

Mit "Player.SetPos Z ZAchse" fährt der endlich mit aber ruckelt dabei wie Sau. Dann einfach vorher ein "DisablePlayerControls 1 1 1 1 0 1 1" einfügen und es flutscht. Damit man sich unten nicht die Haxen bricht muss auf dem letzten Stückelchen Weg noch ein "Player.MoveTo LiftPlattform" eingebaut werden.

Fallgitter-Script welches den Lift einschaltet und Player disabled.

Begin GameMode

if DoOnce == 0 && Move == 1
Set ZAchsePosition to GetPos Z
Set ZAchse to ZAchsePosition -2.5
SetPos Z ZAchse
endif

if DoOnce == 0 && Move == 1
if GetDistance CNWLiftschachtObenZuMarkerREF <= 10
Set CNWLiftPlatformActvREF.Move to 1
DisablePlayerControls 1 1 1 1 0 1 1
PlaySound CNWLiftSound01
Set Move to 0
Set DoOnce to 1
CNWLiftTriggerObenREF.Disable
CNWLiftMarkerLightObenREF.Disable
endif
endif

End

Lift-Script

Begin GameMode

if DoOnce == 0 && Move == 1
Set ZAchsePosition to GetPos Z
Set ZAchse to ZAchsePosition -.8
SetPos Z ZAchse
Player.SetPos Z ZAchse
endif

if DoOnce == 0 && Move == 1
if GetDistance CNWLiftUntenMarkerREF <= 10
CNWLiftPlatformStaticREF.Enable 0
CNWLiftPlatformActvREF.Disable 0
Set CNWLiftGitterUntenActvREF.Move to 2
PlaySound CNWMetalGarage01Open
EnablePlayerControls
Set Move to 0
Set DoOnce to 1
endif
if GetDistance CNWLiftUntenMarkerREF <= 15
Player.MoveTo CNWLiftPlatformActvREF
endif
endif

End


Danke für die Hilfe. :lol:list3no::grinundwech:

MadBonsaiJr
30.03.2010, 19:43
Aber ich hätte eine offtopic Frage:
Wie machst du es, dass sich etwas bewegt. Hab mir die Scripts schon angeschaut aber bei mir geht keine Lampe über dem Kopf an.
Würdest du das in kurz für mich erklären? :D

Angenommen ich würde beim Durchschreiten eines Triggers (unlogisch)
einen "Baum" um 10 m verschieben wollen. Wie?

Papi62
30.03.2010, 22:49
Ist eigentlich recht simpel.


Du brauchst also einen Trigger, einen StopMarker (z.B. XMarker) und einen Baum als Activator, d.h. du musst einen Activator erstellen und diesen mit dem Nif eines Baumes ausstatten.
Der Trigger hat ein Script, z.B. "TriggerScript" und der Activator der wie ein Baum aussieht hat ein Script, z.B. "Baum01REFScript". Der Baum-Activator muss eine Reference ID, z.B. "Baum01REF", haben und "Persistence Reference" muss angehakt sein. (Wobei ein Baum eigentlich eine schlechte Wahl ist weil die eine eigene Klasse sind mit Animation (Blätterbewegung im Wind) und diese wahrscheinlich nicht ablaufen wird in einem Activator, aber egal - weiter im Beispiel.)
Den StopMarker (REF: BaumStopMarkerREF) setzt Du auf der X-Achse des Baumes dahin wo der stoppen soll +10. Die Höhe muss auch gleich sein wie beim Baum sonst stimmen die Masseinheiten nicht.
Das Script des Trigger schaltet die Variable Move des Baumes auf 1, das schaut so aus:

scn TriggerScript

short Move
short DoOnce


Begin OnTriggerEnter Player

if DoOnce == 0
Set Baum01REF.Move to 1
Set DoOnce to 1 ;1 = Schript läuft nur 1 mal ab / 0 = Script läuft jedesmal ab
endif

End


Das Script des Baumes steuert die Bewegung (hier in der X-Achse).

scn Baum01REFScript

short Move
short DoOnce

float XAchsePosition
float XAchse


Begin GameMode ;Das Script läuft bei jedem Frame 1-mal komplett durch, solange die Variablen stimmen

if DoOnce == 0 && Move == 1
Set XAchsePosition to GetPos X ;setzt die Variable "XAchsePosition" auf die aktuelle Position der X-Achse (des Baums)
Set XAchse to XAchsePosition +3 ;setzt die Variable "XAchse" auf den Wert der Variablen "XAchsePosition" zusätzlich 3 Masseinheiten
SetPos X XAchse ;setzt den Baum auf die neue Position gemäss der veränderten Variable "XAchse"
endif

if DoOnce == 0 && Move == 1
if GetDistance BaumStopMarkerREF <= 10 ;wenn der Baum weniger oder gleich 10 vom StopMarker entfernt ist stoppt das Script
Set Move to 0
Set DoOnce to 1
endif
endif

End


Soll das ganze dann auch noch rückwärts funktionieren heisst es dann einfach "if DoOnce == 1 && Move == 2" und ein 2ter Trigger muss dann "Move to 2" an dem Baum liefern. Natürlich braucht auch einen 2ten StopMarker.


Ich hoffe das ist so einigermassen verständlich. :)

MadBonsaiJr
02.04.2010, 16:40
Vielen Dank!

Für den Fall, dass du das Mod hochstellen wirst, wäre es toll, wenn du mir den Link schickst. (Jetzt eine kleine Kostprobe ist auch was tolles :D )
Außer es ist ein "privates Mod" :D

Papi62
02.04.2010, 16:57
Ist ein Teil von Living Wasteland (http://www.globalgameport.com/showthread.php?t=35260), wirst Dich also noch ein bisschen gedulden müssen. :)