PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : fahrende Schiffe



Frage23
04.03.2009, 16:16
Hallo,

ich habe schon so manchen Mod gesehen, womit Schiffe fahren.

Ich bräucht jemanden, der mir sowas für Schiffe macht (große und kleine).
Kann das jemand hier? Ein Mod währe z.b. Adash.
Ich weiß das das kompliziert werden wird, weil ich halt echte Schiffe haben möchte.
Aber das müssen mir dann Leute erklären, die sich mit sowas schonmal Beschäftigt haben.

SirTroy
04.03.2009, 18:57
Kommt drauf an...
Soll es richtig fahren sodass man es sehen kann, oder soll man auf dem schiff sein und es fährt? Ansonsten muss man eine Animation machen und das ist schwierig, da es meist als endlosschleife endet. Auf alle fälle ist es am schwierigsten zu machen das du das Schiff fährst.

Frage23
04.03.2009, 19:04
Nein ganz im Gegenteil, die Schiffe sollen fahren. Ohne einwirkung des Spielers. Kanst du so was für mich machen?

SirTroy
04.03.2009, 19:09
Wie sollen die denn fahren?^^ Die ganze zeit im Kreis im Hafen? oder richtige Strecken?

Frage23
04.03.2009, 19:16
Eher Strecken, aber immer die selben.
das heißt ein Schiff fährt nach Anvil und ein anderes z.b. zum angeln.
Sowas in der Art.

SirTroy
04.03.2009, 19:25
Ne sry so bekomm ich das nicht hin, das ist zu schwer :o
Leichte Animationen bekomm ich ja grade so hin^^

Frage23
04.03.2009, 19:29
Muss ja nur immer wiederholt werden, wie du schon gesagt hast!
Also 1 oder 2 Links bzw. Rechtskurven und eine fürs gerad aus.

SirTroy
04.03.2009, 19:31
Ja aber das Schiff wird dann wieder zurückgesetzt und fährt wieder grade aus...
Anders bekomm ich es nicht hin.

Frage23
04.03.2009, 19:32
Da weiß doch sicher unser Low Post aus oder?

SirTroy
04.03.2009, 19:35
Selbst wenn wir per Script die animation stoppen, wird das Schiff erst zurückgesetzt...
Ich bin nich so doof. :rolleyes: Es ist schwierig sowas zu machen, da ich keine Pro-Animationen machen kann. Zurzeit hackts noch mit dem Exportieren.

Frage23
04.03.2009, 19:36
Man müsste also das Schiff als Lebewesen machen, und es mit Animationen versehen oder?

Anders währe es kompfliziert.

SirTroy
04.03.2009, 19:38
ja.

Frage23
04.03.2009, 19:39
Und da gibt es keinen Ausweg?

SirTroy
04.03.2009, 19:41
Doch.
Wenn du es willst^^
Mit SetPos und GetPos.
Mit GetPos die Position bestimmen und sie dann mit SetPos erhöhen, so sieht es ansatzweise so aus als wenn es fahren würde.

Frage23
04.03.2009, 19:42
Ergebniss: ein 1000 km langer Script oder:D

Hat das Nachteile?

SirTroy
04.03.2009, 19:47
Nein so lang wird das Script nicht. Naja nicht soooooooo lang^^
Nachteile? Es sieht abgehackt aus. Aber es sollte funktionieren.
Moment ich schreib dir mal was rein:

scn Bewegungsscript ;

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 + 500 ;bestimmt, wie weit sich das Objekt auf der x-Koordinate bewegen soll (- und + bestimmen die Richtung auf der x-Koordinate)
set stopy to myself.getpos y + 350 ;bestimmt, wie weit sich das Objekt auf der y-Koordinate bewegen soll (- und + bestimmen die Richtung auf der y-Koordinate)
set stopz to myself.getpos z - 200 ;bestimmt, wie weit sich das Objekt auf der z-Koordinate bewegen soll (- und + bestimmen die Richtung auf der z-Koordinate)
set speedx to +5 ;bestimmt die Geschwindigkeit auf der x-Koordinate (muss negativ sein, wenn der Wert bei der Richtung auch negativ ist)
set speedy to +3.5 ;bestimmt die Geschwindigkeit auf der y-Koordinate (muss negativ sein, wenn der Wert bei der Richtung auch negativ ist)
set speedz to -1.8 ;bestimmt die Geschwindigkeit auf der z-Koordinate (muss negativ sein, wenn der Wert bei der Richtung auch negativ ist)
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)
If (wayx == 1) && (locx >= stopx) || (wayx == -1) && (locx <= stopx) && (wayy == 1) && (locy >= stopy) || (wayy == -1) && (locy <= stopy) && (wayz == 1) && (locz >= stopz) || (wayz == -1) && (locz <= stopz)
set activated to 2
Endif
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 > 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

Endif
End

Frage23
04.03.2009, 20:03
Abgehackt ist irgendwie dumm.
Und wie war das mit dem das Schiff is ein Tier?

SirTroy
04.03.2009, 20:15
Geht unter...

Frage23
04.03.2009, 20:24
Also bleibt mir nur eine elendig lange Animation oder?

SirTroy
04.03.2009, 20:28
Wenn du die hinbekommst xD
Wieso setzt du die schiffe nicht einfach in die welt und gut ist^^

Frage23
04.03.2009, 20:36
Währe halt mal was neues, schönes.

Wie währe es wenn du eine kleine Animation schreibst für ein Fischerbot das rausfährt, dort ein bischen bleibt und dann wiederkommt.

SirTroy
04.03.2009, 20:40
Ich kann doch keine Animation schreiben xD Eine machen^^
Aber es wird so schwer funktionieren, da ich es irgendwie nicht Exportieren kann. Und wie man die Animationen richtig einfügt weiß ich uch net.

Frage23
04.03.2009, 21:00
Wenn keiner mehr weiter weiß dann Low Post fragen:D

SirTroy
04.03.2009, 21:16
Low Post ist Gut im Scripten aber nicht im Animieren xD

Frage23
04.03.2009, 21:38
Die Animationkommt ja von dir;), des mit dem einfügen währe ja dann ein Script:p

Low Post
05.03.2009, 00:26
Wieso bin eigentlich immer ich der Depp, der euch bei Problemen aus der Patsche helfen soll? http://www.multimediaxis.de/images/smilies/old/1/gruebel.gif



Ich würde das mit der SetPos-Lösung probieren. Wenn die Schritte klein genug sind sieht das auch nicht abgehackt aus. Wenn es lange Strecken wären könnte es da Probleme mit der maximalen Scriptlänge geben, aber da gibt es ja zum Glück Mittel und Wege (Activate 1/SetStage) das zu umgehen.

Ein anderes Problem ist, dass bei SetPos meines Wissens nach die Kollision des Objekts nicht mitverschoben wird. Dazu ist ein Disable gefolgt von einem Enable (frühestens im nächsten Frame) nötig.
Ab einer gewissen Framerate (keine Ahnung was, ich würde mal auf etwas in der Gegend zwischen 15 und 25 tippen) fällt das aber auch nicht mehr auf. :)
Wichtig sollte hierbei aber sein, dass es bei mehr Frames sichtbar (=enabled) ist, als unsichtbar (=disabled). Ob das wirklich eine Rolle spielt und wie sich das sonst auswirkt kann ich zwar nicht mit Sicherheit sagen (sollte man evtl. testen), aber wenn man zu faul zum testen ist (^.^) sollte man lieber auf Nummer sicher gehen. :p



Ansonsten würde ich mal diese Mod hier begutachten:
Ruderboote (http://www.scharesoft.de/joomla/index.php?option=com_remository&Itemid=27&func=fileinfo&id=630)

Da müsste man das ganze nur noch automatisieren und unabhängig von Spielerentscheidungen machen.

Muecke49
05.03.2009, 09:45
Script:

Wie LP bereits schreibt. Es sieht nicht abgehakt aus. Das von Dir aufgeführte Boot in Adash wird genau auf diese Art und Weise bewegt. ;) Und auch in meiner Mod gibt es bereits mehrere dieser Scripte.

Allerdings birgt diese Methode eben das Problem der Collision. Diese wird nicht mitbewegt und somit ist das Boot dann Collisionslos und der Spieler könnte auf dem Wasser einfach durch das Schiff oder Boot hindurch laufen. Die grösseren Schiffe bestehen zudem aus mehren Teilen und es wäre zwar möglich, doch ziemlich aufwendig jedes Teil per Script zu verschieben. Wegen der Scriptlängenbegrenzung (1000 Zeilen) müsste man dann wohl das ganze auf mehrere Scripte aufteilen und dies ist nicht mal so schnell gemacht.
Machbar......ohne Frage. Doch sehr aufwendig da Du tricksen musst. Die Frage mit der Collision wäre dann noch nicht geklärt, da die Boote ja jederzeit fahren sollen und es so nicht reicht am Endpunkt ein Boot mit Collision zu enablen und das fahrende Boot welches ohne Collision ankommt zu disablen. Genau wegen diesem Collisionsproblem wird diese Technik selten eingesetzt, oder eben nur auf ganz genau festgelegten Strecken, welche nur einmal genutzt werden und bei denen der Spieler keine Möglichkeit hat herumzulaufen und festzustellen das da eine Collision verloren ging.

Animationen: Noch schwieriger. Erstes gibt es nur wenig Leute die eine solche Animation wie sie Dir vorschwebt erstellen können. Und die meistens davon sind mit eigenen Projekten beschäftigt. Zweitens:
Wenn Du nun als einfachste Lösung ein Fischerboot nimmst und dort die Animation drauf legst, dann hast Du ein leeres Fischerboot welches seine Runden dreht. Doch was machst Du mit dem Fischer und dem Hocker (eventuell) auf dem er sitzen soll???
Wenn Du einen Hocker in dem Boot haben willst auf dem ein NPC per Package sitzen kann, dann musst Du ein Furniture wählen. Auf ein Furniture kannst Du allerdings keine Animation legen, denn für Animationen brauchst Du einen Aktivator. Ganz zu schweigen von dem Fischer.................Wenn Du also nicht nur leere Boote rumfahren lassen willst, dann musst Du zwangsläufig mit Scripts arbeiten. Es gibt im Moment keine andere Lösung.

Über dieses Problem habe ich schon ganze Nächte mit einem Animationsexperten gesessen und rumprobiert. Wir haben auch keine Lösung gefunden, außer dem Schritt zurück zu den Scripten.

Edit: Die von LP verlinkten Ruderboote arbeiten übrigens auch mit Script.

SirTroy
05.03.2009, 11:42
Ja, ich meinte das es abgehackt aussieht wenn er es jetzt auf die schnelle machen will, wenn man jetz schritte von 0,5 nimmt... wird das Script allein schon ewig lang, vorallem bei großen strecken...
Ich hab ja ein Script reingeschrieben wie es funktionieren sollte.

Edit @ Low Post
Wieso immer du^^
Ich hab doch gesagt das du keine Animationen machen kannst und ich hab gesagt des es per Script bewegt werden kann.^^

Low Post
05.03.2009, 15:06
Also zwecks Scriptlänge:
Ich würde da einfach für alle möglichen Bewegungen (vorwärst/rückwärts/links drehen/etc.) Eigene Aktivatoren machen, die das für eine/mehrere variable Referenz ausführen. Im Hauptscript werden erst die zu bewegenden Referenzen bestimmt und dann mit z.B. einem Counter immer die jeweilige Aktion aufgerufen.

Wichtig dabei ist, dass man nicht mehr als 5/6 Aktionen im gleichen Frame aufruft, da sonst der Activate-Befehl einfach nicht ausgeführt wird.



Hier mal ein Beispielscript für Vorwärtsfahren:

scn ActivateorShipMoveForwardScript

long Index
float PosX
float PosY
float TrigAngleZ
ref rMove
ref Ref1
ref Ref2
;etc.

Begin OnActivate
SaveIP
set rMove to Player
if ( Index == 0 )
set rMove to Ref1
elseif ( Index == 1 )
set rMove to Ref2
;etc.
else
ResetAllVariables
Return
endif
rMove.Disable ;Kollision muss mit bewegt werden. Erforder ein Enable im Hauptscript!
if ( ( rMove.GetAngle z ) < 90 )
set TrigAngleZ to ( 90 - ( rMove.GetAngle z ) )
else
set TrigAngleZ to ( 450 - ( rMove.GetAngle z ) )
endif
set PosX to ( ( rMove.GetPos x ) + ( cos TrigAngleZ ) )
set PosY to ( ( rMove.GetPos y ) + ( sin TrigAngleZ ) )
;Um die Geschwindigkeit zu erhöhen muss man einen Faktor vor den Sinus/Cosinus setzen.
rMove.SetPos x, PosX
rMove.SetPos y, PosY
set Index to ( Index + 1 )
RestoreIP
End

Ich hab OBSE-Befehle verwendet, da mir die Ersatzreihen für Sinus/Cosinus nicht geläufig sind. Die lassen sich aber im CS-Wiki finden.
Und der Loop lässt sich auch ohne größere Probleme aufspalten (dann braucht man auch rMove & Index nicht mehr); gleiches gilt natürlich für das ResetAllVariables.


Und hier noch ein Beispiel für ein Hauptscript mit einer Ref, die sich 15 Einheiten nach vorne bewegt:

scn BoatMainScript

int bDisabled ;sicherstellen, dass das Boot 2 Frames sichtbar und nur einen unsichtbar ist
short Stage
long Count

Begin Gamemode
if ( bDisabled )
if ( BoatRef.GetDisalbed )
BoatRef.Enable
else
set bDisabled to 0
endif
Return
endif
set bDisabled to 1
if ( Stage == 0 )
if ( Count < 15 )
set ActivateorShipMoveForwardRef.Ref1 to BoatRef
ActivateorShipMoveForwardRef.Activate Player, 1
Return
endif
elseif ( Stage == 1 )
;hier kommt der Code fürs zurückfahren hin.
;etc.
else
set Stage to 0
endif
set Stage to ( Stage + 1 )
End
Das hier benötigt keine OBSE-Befehle, wenn man die also aus den Bewegungsscripten "eliminiert" (was durchaus möglich ist) wird das auch nicht benötigt.

Frage23
05.03.2009, 20:20
Ist das jetzt die Animierte Technik oder die "Ruckelnde"?

Low Post
05.03.2009, 21:56
Die Ruckelnde. ;)

Frage23
05.03.2009, 22:03
Wieso bin eigentlich immer ich der Depp, der euch bei Problemen aus der Patsche helfen soll? http://www.multimediaxis.de/images/smilies/old/1/gruebel.gif



Ich würde das mit der SetPos-Lösung probieren. Wenn die Schritte klein genug sind sieht das auch nicht abgehackt aus. Wenn es lange Strecken wären könnte es da Probleme mit der maximalen Scriptlänge geben, aber da gibt es ja zum Glück Mittel und Wege (Activate 1/SetStage) das zu umgehen.

Ein anderes Problem ist, dass bei SetPos meines Wissens nach die Kollision des Objekts nicht mitverschoben wird. Dazu ist ein Disable gefolgt von einem Enable (frühestens im nächsten Frame) nötig.
Ab einer gewissen Framerate (keine Ahnung was, ich würde mal auf etwas in der Gegend zwischen 15 und 25 tippen) fällt das aber auch nicht mehr auf. :)
Wichtig sollte hierbei aber sein, dass es bei mehr Frames sichtbar (=enabled) ist, als unsichtbar (=disabled). Ob das wirklich eine Rolle spielt und wie sich das sonst auswirkt kann ich zwar nicht mit Sicherheit sagen (sollte man evtl. testen), aber wenn man zu faul zum testen ist (^.^) sollte man lieber auf Nummer sicher gehen. :p



Ansonsten würde ich mal diese Mod hier begutachten:
Ruderboote (http://www.scharesoft.de/joomla/index.php?option=com_remository&Itemid=27&func=fileinfo&id=630)

Da müsste man das ganze nur noch automatisieren und unabhängig von Spielerentscheidungen machen.

Warum du immer gefragt wirst? Du kannst es!!:p

Nun gut, den Mod hab ich. (Wegen deiner Empfehlung) Mal schaun ob ich des umschreiben kann.

Und das andere geht wirklich nicht einfacher?


EDIT: Was sagt ihr Mods zum Arbeitsamt?

Low Post
06.03.2009, 00:11
o_O

Ist doch ganz einfach.




Modder-Arbeitsamt:
Ich muss noch warten was GlasMond dazu sagt. Da er momentan aber nicht so viel Zeit hat dauert das leider etwas.
Bis dahin bleibt das vorläufig ungestickt (^.^) offen.

SirTroy
06.03.2009, 12:17
Meint ihr es wird noch betrachtet wenn ihrs als Sticky macht? :D

Frage23
06.03.2009, 12:54
Ich les das immer wieder und weiß nie was das sein soll!

Low Post
06.03.2009, 13:58
Sticky?
Das sind die Themen oben im Forum mit dem Wichtig: davor. ;)


Kommt vermutlich vom englischen to stick, auf deutsch anheften.



Und ob das dann noch gesehen wird:
Vermutlich eher selten, aber immer noch öfters, als wenn das irgendwo auf Seite 500 im Forum rumschwirrt. Stickys werden nämlich auch von der SuFu berücksichtigt. ;)



Jetzt aber genug OT hier, zurück zum Thema.

Frage23
06.03.2009, 14:07
Die "Anmimation" von den Booten ist recht gut. Ich weiß nur nicht, wie ich sie genau umschreiben soll, denn ich brauche ja dafür sozusagen eine Tagespan für das Schiff.

MaxikingWolke22
06.03.2009, 22:02
habe gerade mal den thread durchgesehen: wenn man das schiff als tier betrachtete und somit eine flüssige animation hinbekäme, ginge es vllt dann nicht unter, wenn man dem tier ein "überwasserlaufen"-amulett ins inventar packt, oder? das wäre doch möglich?

SirTroy
07.03.2009, 12:22
Meinst du das auch Tiere magische Eigenschaften haben können? (Im sinne von Unterwasserlaufen wies ja in Oblivion heißt)
Ich bin mir da nicht so sicher :o

kenet_korva
07.03.2009, 13:11
Klar geht das. Wieso sollte es nicht gehen? ^^

SirTroy
07.03.2009, 13:14
Weil es Creatures sind :D
Ich weiß nich, da ich sowas nicht so oft mache (NPC und Creatures machen)

Frage23
07.03.2009, 13:39
Oblivion birgt lauter wunder:D
Ich schreib demnächst mal den Script mit den Schiffen rein.