Ok, jetzt hab ichs verstanden.
Die Lösung dazu ist ein globales Managment aller Schiffe, was extrem komliziert ist.
Und komplexe Sachen haben auch oft viele Möglichkeiten zur Umsetzung.
Ich kann ja mal versuchen einen Ansatz zu machen.
Zunächst gehtst du alles Systematisch durch. Was im Einzelnen auf den Maps passiert ist jetzt völlig uninteressant.
Wichtig ist nur, dass du später eine eindeutige Zuweisung hast, was welches Schiff genau macht.
Du nummeriert alle Hafen durch, dasselbe machst du mit den Anlegestellen und definierst für jeden Hafen eine Variable, die die Anzahl der Anlegestellen enthält und eine, welche die Belegung enthält. (Am Besten beide im Binärcode: 1, 3, 7, 15, ...)
Für jedes Schiff legst du 5 Variablen an.
1: Starthafen (Hafen-ID)
2: Zielhafen (Hafen-ID)
3: Reisezeit (Zeit in Sek oder irgendwas anderes)
4: Anlegeposition (Auch Binär)
5: Ankunfts/Abfahrts-Zeit (Zeit in Sek oder irgendwas anderes)
(1, 2, 3 können durchaus Konstant sein, oder anders definiert werden. Ich gehen hier einfach mal vom Komplexesten Fall aus. Du kannst auch mehrere Hafen nehmen, aber dann solltest du die Reisezeit über ein CE mit der Hafenverbindung als Parameter definieren. Lassen wirs fürs Erste lieber^^)
Zu Beginn des Spiels setzt du jedes Schiff in einen Hafen. Also Position auf den gewünschten Hafen setzen und die Hafen-Belegung nicht vergessen. Die Zeit setzt du auf die nächste Abfahrszeit.
Jetzt schreibst du ein Common-Event als Parallel-Prozess.
Dort wird für jedes Schiff geprüft, ob die Spielzeit == Ankunfts/Abfahrts-Zeit ist.
Wenn ja, prüfst du die Position. 0 bedeutet, dass das Schiff noch unterwegs war.
Also gerade anlegen will. Damit es dazu kommt, prüfst du ob eine Anlegestelle frei ist, und setzt ggf. Anlegeposition dadrauf und den Anlegezustand vom Hafen. Nun änderst du den Zielhafen auf den neuen Hafen.
Die Zeit setzt du um die Haltezeit höher.
Code:
Zeit += Haltezeit
Wenn die Position ungleich 0 ist, bedeutet es, dass das Schiff ablegen will. Anlegeposition setzt du auf 0. Starthafen auf den aktuellen Hafen und die Zeit auf:
Code:
Zeit += Reisezeit
Damit sollte es auch gewesen sein. Jetzt hast du einen Virtuellen Schiffsverkehr.
Kommen wir zum Hafen.
Um obrigen Prozess einfach einbinden zu können, solltest du dir CE's schreiben die gewisse Routineabfragen machen und in eine Variable schreiben.
Dazu gehört: Nächste Schiff, was Ankommt/Abreist, Zeit dieses Schiffs, Name, ...
Ein Besipiel mach ich mal mit dem Ermitteln einer freien Anlegeposition:
Var 1 = Hafen (Funktions-Parameter)
Start: CE
Code:
Var 2 = Position der ersten Variablen der Anlegestellenanzahl - 1
Var 2 += Var 1 (Nur wenn die Variablen hintereinander liegen möglich)
Kommentar: Ich muss Ruby benutzen, weil der Editor keine Zeiger-Funktion hat
Skript: $game_variables[3] = $game_variables[$game_variables[2]]
$game_variables[4] = $game_variables[$game_variables[2] + 1]
if Var 3 == Var 4
Hafen voll
$game_variables[4] = 0
else
if Var 3 == 0
Hafen existiert nicht. (Ja, sollte es nicht geben, aber wer weiß)
end if
Var 3 -= Var 4
Var 2 = 0
loop
if Skript: $game_variables[3] & ($game_variables[2] ** 2) > 0
Skript: $game_variables[4] = $game_variables[2] ** 2
exit Event
end if
Var 2 += 1
end loop
end if
Am Ende enthält Variable 4 den Binärcode der Freien Position
Im Nachhinein hätte ich lieber ein Screenshot machen sollen.
Rest musst du zusehn, wie dus hinbekommst. Ich muss auch mal pennen.
Versuchs erst einmal mit einem Schiff. Ist schon schwer genug.
mfg TWS