mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-11 13:10:45 +00:00
Departures: Support waypoints with wait times as calling points
This commit is contained in:
parent
1859b4a059
commit
d8e011d17f
@ -564,6 +564,13 @@ static void GetDepartureCandidateOrderDatesFromVehicle(std::vector<OrderDate> &n
|
||||
}
|
||||
}
|
||||
|
||||
static bool IsStationIDCallingPointOrder(const Order *order)
|
||||
{
|
||||
if ((order->IsType(OT_GOTO_STATION) || order->IsType(OT_IMPLICIT)) && (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) == 0) return true;
|
||||
if (order->IsType(OT_GOTO_WAYPOINT) && order->IsWaitTimetabled()) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
struct DepartureViaTerminusState {
|
||||
/* We keep track of potential via stations along the way. If we call at a station immediately after going via it, then it is the via station. */
|
||||
StationID candidate_via = INVALID_STATION;
|
||||
@ -574,7 +581,7 @@ struct DepartureViaTerminusState {
|
||||
bool found_terminus = false;
|
||||
|
||||
bool CheckOrder(const Vehicle *v, Departure *d, const Order *order, DepartureOrderDestinationDetector source, DepartureCallingSettings calling_settings);
|
||||
bool HandleCallingPoint(Departure *d, const Order *order, CallAt c);
|
||||
bool HandleCallingPoint(Departure *d, const Order *order, CallAt c, DepartureCallingSettings calling_settings);
|
||||
};
|
||||
|
||||
/**
|
||||
@ -620,32 +627,35 @@ bool DepartureViaTerminusState::CheckOrder(const Vehicle *v, Departure *d, const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool DepartureViaTerminusState::HandleCallingPoint(Departure *d, const Order *order, CallAt c)
|
||||
bool DepartureViaTerminusState::HandleCallingPoint(Departure *d, const Order *order, CallAt c, DepartureCallingSettings calling_settings)
|
||||
{
|
||||
if (!IsStationIDCallingPointOrder(order)) return false;
|
||||
|
||||
if (order->IsType(OT_GOTO_WAYPOINT)) {
|
||||
if (!calling_settings.ShowAllStops()) return false;
|
||||
} else {
|
||||
if (!calling_settings.ShowAllStops() && order->GetUnloadType() == OUFB_NO_UNLOAD) return false;
|
||||
}
|
||||
|
||||
/* If this order's station is already in the calling, then the previous called at station is the terminus. */
|
||||
if (std::find(d->calling_at.begin(), d->calling_at.end(), c) != d->calling_at.end()) {
|
||||
this->found_terminus = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* If appropriate, add the station to the calling at list and make it the candidate terminus. */
|
||||
if ((order->GetType() == OT_GOTO_STATION ||
|
||||
order->GetType() == OT_IMPLICIT) &&
|
||||
order->GetNonStopType() != ONSF_NO_STOP_AT_ANY_STATION &&
|
||||
order->GetNonStopType() != ONSF_NO_STOP_AT_DESTINATION_STATION) {
|
||||
if (d->via == INVALID_STATION && pending_via != INVALID_STATION) {
|
||||
d->via = this->pending_via;
|
||||
d->via2 = this->pending_via2;
|
||||
}
|
||||
if (d->via == INVALID_STATION && this->candidate_via == (StationID)order->GetDestination()) {
|
||||
d->via = (StationID)order->GetDestination();
|
||||
}
|
||||
d->terminus = c;
|
||||
d->calling_at.push_back(c);
|
||||
/* Add the station to the calling at list and make it the candidate terminus. */
|
||||
if (d->via == INVALID_STATION && pending_via != INVALID_STATION) {
|
||||
d->via = this->pending_via;
|
||||
d->via2 = this->pending_via2;
|
||||
}
|
||||
if (d->via == INVALID_STATION && this->candidate_via == (StationID)order->GetDestination()) {
|
||||
d->via = (StationID)order->GetDestination();
|
||||
}
|
||||
d->terminus = c;
|
||||
d->calling_at.push_back(c);
|
||||
|
||||
/* If we unload all at this station, then it is the terminus. */
|
||||
if (order->GetType() == OT_GOTO_STATION && order->GetUnloadType() == OUFB_UNLOAD) {
|
||||
/* If we unload all at this station and departure load tests are not disabled, then it is the terminus. */
|
||||
if (order->GetType() == OT_GOTO_STATION && order->GetUnloadType() == OUFB_UNLOAD && !calling_settings.DepartureNoLoadTest()) {
|
||||
if (d->calling_at.size() > 0) {
|
||||
this->found_terminus = true;
|
||||
}
|
||||
@ -655,20 +665,6 @@ bool DepartureViaTerminusState::HandleCallingPoint(Departure *d, const Order *or
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether this order is an ignorable calling point.
|
||||
*/
|
||||
static bool IsIgnorableCallingAtOrder(const Order *order, DepartureCallingSettings calling_settings)
|
||||
{
|
||||
if ((order->GetType() != OT_GOTO_STATION && order->GetType() != OT_IMPLICIT) ||
|
||||
(order->GetUnloadType() == OUFB_NO_UNLOAD && !calling_settings.ShowAllStops()) ||
|
||||
order->GetNonStopType() == ONSF_NO_STOP_AT_ANY_STATION ||
|
||||
order->GetNonStopType() == ONSF_NO_STOP_AT_DESTINATION_STATION) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process arrival history, returns true if a valid arrival was found.
|
||||
*/
|
||||
@ -679,9 +675,7 @@ static bool ProcessArrivalHistory(Departure *d, std::span<const Order *> arrival
|
||||
for (uint i = 0; i < (uint)arrival_history.size(); i++) {
|
||||
const Order *o = arrival_history[i];
|
||||
|
||||
if ((o->GetType() == OT_GOTO_STATION ||
|
||||
o->GetType() == OT_IMPLICIT) &&
|
||||
(o->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) == 0) {
|
||||
if (IsStationIDCallingPointOrder(o)) {
|
||||
if (source.StationMatches(o->GetDestination())) {
|
||||
/* Same as source order, remove all possible origins */
|
||||
possible_origins.clear();
|
||||
@ -695,14 +689,13 @@ static bool ProcessArrivalHistory(Departure *d, std::span<const Order *> arrival
|
||||
item.first = INVALID_STATION;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((o->GetType() == OT_GOTO_STATION || o->GetType() == OT_IMPLICIT) &&
|
||||
(o->GetLoadType() != OLFB_NO_LOAD || calling_settings.ShowAllStops()) &&
|
||||
!source.StationMatches(o->GetDestination()) &&
|
||||
(o->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) == 0) {
|
||||
possible_origins.push_back({ o->GetDestination(), i });
|
||||
if (o->IsType(OT_GOTO_WAYPOINT)) {
|
||||
if (calling_settings.ShowAllStops()) possible_origins.push_back({ o->GetDestination(), i });
|
||||
} else {
|
||||
if (calling_settings.ShowAllStops() || o->GetLoadType() != OLFB_NO_LOAD) possible_origins.push_back({ o->GetDestination(), i });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -719,10 +712,12 @@ static bool ProcessArrivalHistory(Departure *d, std::span<const Order *> arrival
|
||||
if (origin != nullptr) {
|
||||
for (uint i = origin_arrival_history_index + 1; i < (uint)arrival_history.size(); i++) {
|
||||
const Order *o = arrival_history[i];
|
||||
if (o->GetType() == OT_GOTO_STATION &&
|
||||
(o->GetLoadType() != OLFB_NO_LOAD || calling_settings.ShowAllStops()) &&
|
||||
(o->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) == 0) {
|
||||
d->calling_at.push_back(CallAt((StationID)o->GetDestination()));
|
||||
if (IsStationIDCallingPointOrder(o)) {
|
||||
if (o->IsType(OT_GOTO_STATION) && (o->GetLoadType() != OLFB_NO_LOAD || calling_settings.ShowAllStops())) {
|
||||
d->calling_at.push_back(CallAt((StationID)o->GetDestination()));
|
||||
} else if (o->IsType(OT_GOTO_WAYPOINT) && calling_settings.ShowAllStops()) {
|
||||
d->calling_at.push_back(CallAt((StationID)o->GetDestination()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -896,9 +891,7 @@ static DepartureList MakeDepartureListLiveMode(DepartureOrderDestinationDetector
|
||||
c.station = (StationID)order->GetDestination();
|
||||
|
||||
/* We're not interested in this order any further if we're not calling at it. */
|
||||
if (!IsIgnorableCallingAtOrder(order, calling_settings)) {
|
||||
if (via_state.HandleCallingPoint(d, order, c)) break;
|
||||
}
|
||||
if (via_state.HandleCallingPoint(d, order, c, calling_settings)) break;
|
||||
|
||||
departure_tick += order->GetWaitTime();
|
||||
|
||||
@ -974,7 +967,7 @@ static DepartureList MakeDepartureListLiveMode(DepartureOrderDestinationDetector
|
||||
|
||||
std::vector<const Order *> new_history;
|
||||
for (const Order *o = lod.v->GetOrder(predict_history_starting_from); o != existing_history_start; o = lod.v->orders->GetNext(o)) {
|
||||
if (o->GetType() == OT_GOTO_STATION || o->GetType() == OT_IMPLICIT) new_history.push_back(o);
|
||||
if (o->GetType() == OT_GOTO_STATION || o->GetType() == OT_IMPLICIT || (o->IsType(OT_GOTO_WAYPOINT) && o->IsWaitTimetabled())) new_history.push_back(o);
|
||||
}
|
||||
new_history.insert(new_history.end(), lod.arrival_history.begin(), lod.arrival_history.end());
|
||||
lod.arrival_history = std::move(new_history);
|
||||
@ -1253,9 +1246,7 @@ void DepartureListScheduleModeSlotEvaluator::EvaluateFromSourceOrder(const Order
|
||||
c.station = (StationID)order->GetDestination();
|
||||
|
||||
/* We're not interested in this order any further if we're not calling at it. */
|
||||
if (!IsIgnorableCallingAtOrder(order, this->calling_settings)) {
|
||||
if (via_state.HandleCallingPoint(&d, order, c)) break;
|
||||
}
|
||||
if (via_state.HandleCallingPoint(&d, order, c, this->calling_settings)) break;
|
||||
|
||||
departure_tick += order->GetWaitTime();
|
||||
|
||||
|
@ -823,6 +823,17 @@ uint DeparturesWindow::GetMinWidth() const
|
||||
return result + ScaleGUITrad(140);
|
||||
}
|
||||
|
||||
/* Uses 2 parameters */
|
||||
static void FillBaseStationDParam(size_t n, StationID id)
|
||||
{
|
||||
if (Waypoint::IsValidID(id)) {
|
||||
SetDParam(n, STR_WAYPOINT_NAME);
|
||||
} else {
|
||||
SetDParam(n, STR_STATION_NAME);
|
||||
}
|
||||
SetDParam(n + 1, id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws a list of departures.
|
||||
*/
|
||||
@ -1048,8 +1059,8 @@ void DeparturesWindow::DrawDeparturesListItems(const Rect &r) const
|
||||
|
||||
if (via == INVALID_STATION) {
|
||||
/* Only show the terminus. */
|
||||
SetDParam(0, d->terminus.station);
|
||||
SetDParam(1, icon);
|
||||
FillBaseStationDParam(0, d->terminus.station);
|
||||
SetDParam(2, icon);
|
||||
DrawString(dest_left, dest_right, y + 1, STR_DEPARTURES_TERMINUS);
|
||||
} else {
|
||||
auto set_via_dparams = [&](uint offset) {
|
||||
@ -1087,16 +1098,16 @@ void DeparturesWindow::DrawDeparturesListItems(const Rect &r) const
|
||||
SetDParam(offset, SPECSTR_TEMP_START);
|
||||
};
|
||||
/* Show the terminus and the via station. */
|
||||
SetDParam(0, d->terminus.station);
|
||||
SetDParam(1, icon);
|
||||
set_via_dparams(2);
|
||||
FillBaseStationDParam(0, d->terminus.station);
|
||||
SetDParam(2, icon);
|
||||
set_via_dparams(3);
|
||||
int text_width = (GetStringBoundingBox(STR_DEPARTURES_TERMINUS_VIA_STATION)).width;
|
||||
|
||||
if (dest_left + text_width < dest_right) {
|
||||
/* They will both fit, so show them both. */
|
||||
SetDParam(0, d->terminus.station);
|
||||
SetDParam(1, icon);
|
||||
set_via_dparams(2);
|
||||
FillBaseStationDParam(0, d->terminus.station);
|
||||
SetDParam(2, icon);
|
||||
set_via_dparams(3);
|
||||
DrawString(dest_left, dest_right, y + 1, STR_DEPARTURES_TERMINUS_VIA_STATION);
|
||||
} else {
|
||||
/* They won't both fit, so switch between showing the terminus and the via station approximately every 4 seconds. */
|
||||
@ -1104,8 +1115,8 @@ void DeparturesWindow::DrawDeparturesListItems(const Rect &r) const
|
||||
set_via_dparams(0);
|
||||
DrawString(dest_left, dest_right, y + 1, STR_DEPARTURES_VIA);
|
||||
} else {
|
||||
SetDParam(0, d->terminus.station);
|
||||
SetDParam(1, icon);
|
||||
FillBaseStationDParam(0, d->terminus.station);
|
||||
SetDParam(2, icon);
|
||||
DrawString(dest_left, dest_right, y + 1, STR_DEPARTURES_TERMINUS_VIA);
|
||||
}
|
||||
this->scroll_refresh = true;
|
||||
@ -1188,18 +1199,19 @@ void DeparturesWindow::DrawDeparturesListItems(const Rect &r) const
|
||||
/* STR_DEPARTURES_CALLING_AT_LAST_STATION :{STATION} & {RAW_STRING}*/
|
||||
std::string buffer;
|
||||
|
||||
auto station_str = [&](const CallAt &c) -> StringID {
|
||||
/* Uses 3 or 4 parameters */
|
||||
auto fill_calling_at_dparam = [&](size_t n, const CallAt &c) {
|
||||
if (c.scheduled_tick != 0 && arrival_time_width > 0) {
|
||||
return STR_DEPARTURES_CALLING_AT_STATION_WITH_TIME;
|
||||
} else {
|
||||
return STR_STATION_NAME;
|
||||
SetDParam(n, STR_DEPARTURES_CALLING_AT_STATION_WITH_TIME);
|
||||
n++;
|
||||
}
|
||||
FillBaseStationDParam(n, c.station);
|
||||
SetDParam(n + 2, c.scheduled_tick);
|
||||
};
|
||||
|
||||
if (d->calling_at.size() != 0) {
|
||||
SetDParam(0, d->calling_at[0].station);
|
||||
SetDParam(1, d->calling_at[0].scheduled_tick);
|
||||
std::string calling_at_buffer = GetString(station_str(d->calling_at[0]));
|
||||
fill_calling_at_dparam(0, d->calling_at[0]);
|
||||
std::string calling_at_buffer = GetString(STR_JUST_STRING3);
|
||||
|
||||
const CallAt *continues_to = nullptr;
|
||||
|
||||
@ -1217,17 +1229,13 @@ void DeparturesWindow::DrawDeparturesListItems(const Rect &r) const
|
||||
break;
|
||||
}
|
||||
SetDParamStr(0, std::move(calling_at_buffer));
|
||||
SetDParam(1, station_str(d->calling_at[i]));
|
||||
SetDParam(2, d->calling_at[i].station);
|
||||
SetDParam(3, d->calling_at[i].scheduled_tick);
|
||||
fill_calling_at_dparam(1, d->calling_at[i]);
|
||||
calling_at_buffer = GetString(STR_DEPARTURES_CALLING_AT_STATION);
|
||||
}
|
||||
|
||||
/* Finally, finish off with " and <station>". */
|
||||
SetDParamStr(0, std::move(calling_at_buffer));
|
||||
SetDParam(1, station_str(d->calling_at[i]));
|
||||
SetDParam(2, d->calling_at[i].station);
|
||||
SetDParam(3, d->calling_at[i].scheduled_tick);
|
||||
fill_calling_at_dparam(1, d->calling_at[i]);
|
||||
calling_at_buffer = GetString(STR_DEPARTURES_CALLING_AT_LAST_STATION);
|
||||
}
|
||||
|
||||
@ -1235,9 +1243,7 @@ void DeparturesWindow::DrawDeparturesListItems(const Rect &r) const
|
||||
if (continues_to == nullptr) {
|
||||
buffer = GetString(STR_DEPARTURES_CALLING_AT_LIST);
|
||||
} else {
|
||||
SetDParam(1, station_str(*continues_to));
|
||||
SetDParam(2, continues_to->station);
|
||||
SetDParam(3, continues_to->scheduled_tick);
|
||||
fill_calling_at_dparam(1, *continues_to);
|
||||
buffer = GetString(STR_DEPARTURES_CALLING_AT_LIST_SMART_TERMINUS);
|
||||
}
|
||||
|
||||
|
@ -1184,9 +1184,9 @@ STR_DEPARTURES_TIME :{COLOUR}{STRING
|
||||
STR_DEPARTURES_TIME_DEP :{COLOUR}{STRING} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TIME_ARR :{COLOUR}{STRING} {RED}{DOWN_ARROW}
|
||||
STR_DEPARTURES_TIME_BOTH :{COLOUR}{STRING} {RED}{DOWN_ARROW} {COLOUR}{STRING} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STATION}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STATION}{STRING} přes {STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STATION}{STRING} přes
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STRING}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STRING}{STRING} přes {STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STRING}{STRING} přes
|
||||
STR_DEPARTURES_VIA :{ORANGE}přes {STRING}
|
||||
STR_DEPARTURES_TOC :{ORANGE}{COMPANY}
|
||||
STR_DEPARTURES_GROUP :{ORANGE}{GROUP}
|
||||
|
@ -1368,19 +1368,19 @@ STR_DEPARTURES_TIME :{COLOUR}{STRING
|
||||
STR_DEPARTURES_TIME_DEP :{COLOUR}{STRING1} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TIME_ARR :{COLOUR}{STRING1} {RED}{DOWN_ARROW}
|
||||
STR_DEPARTURES_TIME_BOTH :{COLOUR}{STRING1} {RED}{DOWN_ARROW} {COLOUR}{STRING1} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STATION}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STATION}{STRING} via {STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STATION}{STRING} via
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STRING1}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STRING1}{STRING} via {STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STRING1}{STRING} via
|
||||
STR_DEPARTURES_VIA :{ORANGE}via {STRING}
|
||||
STR_DEPARTURES_TOC :{ORANGE}{COMPANY}
|
||||
STR_DEPARTURES_GROUP :{ORANGE}{GROUP}
|
||||
STR_DEPARTURES_VEH :{ORANGE}{VEHICLE}
|
||||
STR_DEPARTURES_CALLING_AT :{ORANGE}Calling at:
|
||||
STR_DEPARTURES_CALLING_AT_STATION :{RAW_STRING}, {STRING2}
|
||||
STR_DEPARTURES_CALLING_AT_LAST_STATION :{RAW_STRING} and {STRING2}
|
||||
STR_DEPARTURES_CALLING_AT_STATION :{RAW_STRING}, {STRING3}
|
||||
STR_DEPARTURES_CALLING_AT_LAST_STATION :{RAW_STRING} and {STRING3}
|
||||
STR_DEPARTURES_CALLING_AT_LIST :{ORANGE}{RAW_STRING}.
|
||||
STR_DEPARTURES_CALLING_AT_LIST_SMART_TERMINUS :{ORANGE}{RAW_STRING}. This service continues to {STRING2}.
|
||||
STR_DEPARTURES_CALLING_AT_STATION_WITH_TIME :{STATION} ({TT_TIME_ABS})
|
||||
STR_DEPARTURES_CALLING_AT_LIST_SMART_TERMINUS :{ORANGE}{RAW_STRING}. This service continues to {STRING3}.
|
||||
STR_DEPARTURES_CALLING_AT_STATION_WITH_TIME :{STRING1} ({TT_TIME_ABS})
|
||||
STR_DEPARTURES_TINY :{TINY_FONT}{STRING2}
|
||||
STR_DEPARTURES_VIA_DESCRIPTOR :{STRING1}{STRING}
|
||||
STR_DEPARTURES_VIA_AND :{STRING} and {STRING}
|
||||
|
@ -1306,9 +1306,9 @@ STR_DEPARTURES_TIME :{COLOUR}{STRING
|
||||
STR_DEPARTURES_TIME_DEP :{COLOUR}{STRING} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TIME_ARR :{COLOUR}{STRING} {RED}{DOWN_ARROW}
|
||||
STR_DEPARTURES_TIME_BOTH :{COLOUR}{STRING} {RED}{DOWN_ARROW} {COLOUR}{STRING} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STATION}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STATION}{STRING} vía {STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STATION}{STRING} vía
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STRING}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STRING}{STRING} vía {STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STRING}{STRING} vía
|
||||
STR_DEPARTURES_VIA :{ORANGE}vía {STRING}
|
||||
STR_DEPARTURES_TOC :{ORANGE}{COMPANY}
|
||||
STR_DEPARTURES_GROUP :{ORANGE}{GROUP}
|
||||
|
@ -1066,9 +1066,9 @@ STR_DEPARTURES_TIME :{COLOUR}{STRING
|
||||
STR_DEPARTURES_TIME_DEP :{COLOUR}{STRING} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TIME_ARR :{COLOUR}{STRING} {RED}{DOWN_ARROW}
|
||||
STR_DEPARTURES_TIME_BOTH :{COLOUR}{STRING} {RED}{DOWN_ARROW} {COLOUR}{STRING} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STATION}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STATION}{STRING} über {STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STATION}{STRING} über
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STRING}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STRING}{STRING} über {STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STRING}{STRING} über
|
||||
STR_DEPARTURES_VIA :{ORANGE}über {STRING}
|
||||
STR_DEPARTURES_TOC :{ORANGE}{COMPANY}
|
||||
STR_DEPARTURES_GROUP :{ORANGE}{GROUP}
|
||||
|
@ -47,9 +47,9 @@ STR_DEPARTURES_TIME :{COLOUR}{STRING
|
||||
STR_DEPARTURES_TIME_DEP :{COLOUR}{STRING} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TIME_ARR :{COLOUR}{STRING} {RED}{DOWN_ARROW}
|
||||
STR_DEPARTURES_TIME_BOTH :{COLOUR}{STRING} {RED}{DOWN_ARROW} {COLOUR}{STRING} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STATION}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STATION}{STRING} 経由 {STRING}経由
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STATION}{STRING} 経由
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STRING}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STRING}{STRING} 経由 {STRING}経由
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STRING}{STRING} 経由
|
||||
STR_DEPARTURES_VIA :{ORANGE} {STRING} 経由
|
||||
STR_DEPARTURES_TOC :{ORANGE}{COMPANY}
|
||||
STR_DEPARTURES_GROUP :{ORANGE}{GROUP}
|
||||
|
@ -1306,9 +1306,9 @@ STR_DEPARTURES_TIME :{COLOUR}{STRING
|
||||
STR_DEPARTURES_TIME_DEP :{COLOUR}{STRING} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TIME_ARR :{COLOUR}{STRING} {RED}{DOWN_ARROW}
|
||||
STR_DEPARTURES_TIME_BOTH :{COLOUR}{STRING} {RED}{DOWN_ARROW} {COLOUR}{STRING} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STATION}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STATION}{STRING} 경유 {STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STATION}{STRING} 경유
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STRING}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STRING}{STRING} 경유 {STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STRING}{STRING} 경유
|
||||
STR_DEPARTURES_VIA :{ORANGE}경유 {STRING}
|
||||
STR_DEPARTURES_TOC :{ORANGE}{COMPANY}
|
||||
STR_DEPARTURES_GROUP :{ORANGE}{GROUP}
|
||||
|
@ -1313,9 +1313,9 @@ STR_DEPARTURES_TIME :{COLOUR}{STRING
|
||||
STR_DEPARTURES_TIME_DEP :{COLOUR}{STRING} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TIME_ARR :{COLOUR}{STRING} {RED}{DOWN_ARROW}
|
||||
STR_DEPARTURES_TIME_BOTH :{COLOUR}{STRING} {RED}{DOWN_ARROW} {COLOUR}{STRING} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STATION}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STATION}{STRING} через {STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STATION}{STRING} через
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STRING}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STRING}{STRING} через {STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STRING}{STRING} через
|
||||
STR_DEPARTURES_VIA :{ORANGE}через {STRING}
|
||||
STR_DEPARTURES_TOC :{ORANGE}{COMPANY}
|
||||
STR_DEPARTURES_GROUP :{ORANGE}{GROUP}
|
||||
|
@ -1308,9 +1308,9 @@ STR_DEPARTURES_TIME :{COLOUR}{STRING
|
||||
STR_DEPARTURES_TIME_DEP :{COLOUR}{STRING} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TIME_ARR :{COLOUR}{STRING} {RED}{DOWN_ARROW}
|
||||
STR_DEPARTURES_TIME_BOTH :{COLOUR}{STRING} {RED}{DOWN_ARROW} {COLOUR}{STRING} {GREEN}{UP_ARROW}
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STATION}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STATION}{STRING}经由{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STATION}{STRING}经由
|
||||
STR_DEPARTURES_TERMINUS :{ORANGE}{STRING}{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA_STATION :{ORANGE}{STRING}{STRING}经由{STRING}
|
||||
STR_DEPARTURES_TERMINUS_VIA :{ORANGE}{STRING}{STRING}经由
|
||||
STR_DEPARTURES_VIA :{ORANGE}经由{STRING}
|
||||
STR_DEPARTURES_TOC :{ORANGE}{COMPANY}
|
||||
STR_DEPARTURES_GROUP :{ORANGE}{GROUP}
|
||||
|
Loading…
Reference in New Issue
Block a user