Conditional order: Replace "next station" with manually set station

pull/590/head
Jonathan G Rennison 8 months ago
parent a1eefaecd5
commit 02aecca5ae

@ -1506,13 +1506,6 @@ STR_ORDER_DROP_SELL_DEPOT :Prodat vozidlo
STR_ORDER_CONDITIONAL_VEHICLE_IN_SLOT :Vozidlo ve slotu
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE_ORDER :{STRING}, že vyžaduje údržbu
STR_ORDER_CONDITIONAL_CARGO_WAITING_ORDER :další stanice {STRING} čekající {STRING}
STR_ORDER_CONDITIONAL_ACCEPTANCE :další stanice {STRING} {STRING}
STR_CONDITIONAL_FREE_PLATFORMS :Skočit na příkaz {COMMA}, když další stanice {STRING} {COMMA} {P "volné nástupiště" "volná nástupiště" "volných nástupišť"}
STR_CONDITIONAL_PERCENT :Skočit na příkaz {COMMA} v {COMMA} procentech případů
STR_ORDER_CONDITIONAL_NEXT_STATION :Další stanice
STR_ORDER_CONDITIONAL_CARGO_TOOLTIP :{BLACK}Náklad, s nímž mají být porovnávány údaje ze stanice
STR_ORDER_CONDITIONAL_SLOT_TOOLTIP :{BLACK}Vlakový slot, jehož obsazenost má být ověřena
@ -1611,15 +1604,16 @@ STR_ORDER_RV_DIR_SE :[jihovýchodní
STR_ORDER_RV_DIR_SW :[jihozápadní směr]
STR_ORDER_RV_DIR_NW :[severozápadní směr]
STR_ORDER_CONDITIONAL_CARGO_ACCEPTANCE :Skočit na příkaz {COMMA}, když další stanice {STRING} {STRING}
STR_ORDER_CONDITIONAL_CARGO_WAITING_DISPLAY :Skočit na příkaz {COMMA}, když další stanice {STRING} čekající {STRING}
STR_ORDER_CONDITIONAL_PERCENT_DISPLAY :Skočit na příkaz {COMMA} v {COMMA} procentech případů
STR_ORDER_CONDITIONAL_CARGO_ACCEPTANCE :Skočit na příkaz {COMMA}, když {STRING} {STRING} {STRING}
STR_ORDER_CONDITIONAL_CARGO_WAITING_DISPLAY :Skočit na příkaz {COMMA}, když {STRING} {STRING} čekající {STRING}
STR_ORDER_CONDITIONAL_SLOT :Skočit na příkaz {COMMA}, když {TRSLOT} {STRING}
STR_ORDER_CONDITIONAL_INVALID_SLOT :Skočit na příkaz {COMMA}, když {PUSH_COLOUR}{RED}{STRING} {POP_COLOUR}{STRING}
STR_ORDER_CONDITIONAL_IN_SLOT :Skočit na příkaz {COMMA}, když {STRING} slotu: {TRSLOT}
STR_ORDER_CONDITIONAL_IN_INVALID_SLOT :Skočit na příkaz {COMMA}, když {STRING} {PUSH_COLOUR}{RED}{STRING} {POP_COLOUR}
STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE_DISPLAY :Skočit na příkaz {COMMA}, když procento naložení {STRING} {STRING} {COMMA}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_DISPLAY :Skočit na příkaz {COMMA}, když množství {STRING} v další stanici {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_VIA_DISPLAY :Skočit na příkaz {COMMA}, když množství {STRING} v další stanici přes {STATION} {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_DISPLAY :Skočit na příkaz {COMMA}, když množství {STRING} v {STRING} {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_VIA_DISPLAY :Skočit na příkaz {COMMA}, když množství {STRING} v {STRING} přes {STRING} {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_COUNTER :Skočit na příkaz {COMMA}, když hodnota {TRCOUNTER} {STRING} {COMMA}
STR_ORDER_CONDITIONAL_INVALID_COUNTER :Skočit na příkaz {COMMA}, když hodnota {PUSH_COLOUR}{RED}{STRING}{POP_COLOUR} {STRING} {COMMA}
STR_ORDER_CONDITIONAL_TIME_HHMM :Skočit na příkaz {COMMA}, když {STRING} {STRING} {TIME_HHMM}

@ -18,6 +18,7 @@ STR_JUST_STRING3 :{STRING3}
STR_JUST_VELOCITY :{VELOCITY}
STR_JUST_TT_TICKS :{TT_TICKS}
STR_JUST_TT_TICKS_LONG :{TT_TICKS_LONG}
STR_JUST_STATION :{STATION}
STR_RED_INT :{RED}{NUM}
@ -1566,13 +1567,6 @@ STR_ORDER_DROP_SELL_DEPOT :Sell vehicle
STR_ORDER_CONDITIONAL_VEHICLE_IN_SLOT :Vehicle in slot
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE_ORDER :Requires service {STRING}
STR_ORDER_CONDITIONAL_CARGO_WAITING_ORDER :Next station {STRING} {STRING} waiting
STR_ORDER_CONDITIONAL_ACCEPTANCE :Next station {STRING} {STRING}
STR_CONDITIONAL_FREE_PLATFORMS :Jump to order {COMMA} when Next station {STRING} {COMMA} free platform{P "" s}
STR_CONDITIONAL_PERCENT :Jump to order {COMMA} {COMMA} percent of times
STR_ORDER_CONDITIONAL_NEXT_STATION :Next station
STR_ORDER_CONDITIONAL_CARGO_TOOLTIP :{BLACK}The cargo to compare the station data against
STR_ORDER_CONDITIONAL_SLOT_TOOLTIP :{BLACK}The train slot to check the occupancy of
@ -1583,6 +1577,8 @@ STR_ORDER_CONDITIONAL_SCHED_SELECT_TOOLTIP :{BLACK}The disp
STR_ORDER_CONDITIONAL_SCHED_TEST_TOOLTIP :{BLACK}The dispatch schedule condition to test
STR_ORDER_CONDITIONAL_VIA :{BLACK}Via
STR_ORDER_CONDITIONAL_VIA_TOOLTIP :{BLACK}The via station to check the waiting cargo amount for
STR_ORDER_CONDITIONAL_STATION :{BLACK}Station
STR_ORDER_CONDITIONAL_STATION_TOOLTIP :{BLACK}The station to check
STR_ORDER_CONDITIONAL_COMPARATOR_ACCEPTS :accepts
STR_ORDER_CONDITIONAL_COMPARATOR_DOES_NOT_ACCEPT :does not accept
@ -1671,15 +1667,19 @@ STR_ORDER_RV_DIR_SE :[south-east dir
STR_ORDER_RV_DIR_SW :[south-west direction]
STR_ORDER_RV_DIR_NW :[north-west direction]
STR_ORDER_CONDITIONAL_CARGO_ACCEPTANCE :Jump to order {COMMA} when Next station {STRING} {STRING}
STR_ORDER_CONDITIONAL_CARGO_WAITING_DISPLAY :Jump to order {COMMA} when Next station {STRING} {STRING}
STR_ORDER_CONDITIONAL_UNDEFINED_STATION :{PUSH_COLOUR}{RED}undefined station{POP_COLOUR}
STR_ORDER_CONDITIONAL_FREE_PLATFORMS_DISPLAY :Jump to order {COMMA} when {STRING1} {STRING} {COMMA} free platform{P "" s}
STR_ORDER_CONDITIONAL_PERCENT_DISPLAY :Jump to order {COMMA} {COMMA} percent of times
STR_ORDER_CONDITIONAL_CARGO_ACCEPTANCE :Jump to order {COMMA} when {STRING1} {STRING} {STRING}
STR_ORDER_CONDITIONAL_CARGO_WAITING_DISPLAY :Jump to order {COMMA} when {STRING1} {STRING} {STRING}
STR_ORDER_CONDITIONAL_SLOT :Jump to order {COMMA} when {TRSLOT} {STRING}
STR_ORDER_CONDITIONAL_INVALID_SLOT :Jump to order {COMMA} when {PUSH_COLOUR}{RED}{STRING} {POP_COLOUR}{STRING}
STR_ORDER_CONDITIONAL_IN_SLOT :Jump to order {COMMA} when {STRING} slot: {TRSLOT}
STR_ORDER_CONDITIONAL_IN_INVALID_SLOT :Jump to order {COMMA} when {STRING} {PUSH_COLOUR}{RED}{STRING} {POP_COLOUR}
STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE_DISPLAY :Jump to order {COMMA} when Load percentage of {STRING} {STRING} {COMMA}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_DISPLAY :Jump to order {COMMA} when {STRING} at next station {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_VIA_DISPLAY :Jump to order {COMMA} when {STRING} at next station via {STATION} {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_DISPLAY :Jump to order {COMMA} when {STRING} at {STRING1} {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_VIA_DISPLAY :Jump to order {COMMA} when {STRING} at {STRING1} via {STRING1} {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_COUNTER :Jump to order {COMMA} when value of {TRCOUNTER} {STRING} {COMMA}
STR_ORDER_CONDITIONAL_INVALID_COUNTER :Jump to order {COMMA} when value of {PUSH_COLOUR}{RED}{STRING}{POP_COLOUR} {STRING} {COMMA}
STR_ORDER_CONDITIONAL_TIME_HHMM :Jump to order {COMMA} when {STRING} {STRING} {TIME_HHMM}

@ -1513,13 +1513,6 @@ STR_ORDER_DROP_SELL_DEPOT :Vender vehícul
STR_ORDER_CONDITIONAL_VEHICLE_IN_SLOT :Vehículo en slot
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE_ORDER :Precisa servizo {STRING}
STR_ORDER_CONDITIONAL_CARGO_WAITING_ORDER :Próxima estación {STRING} {STRING} agardando
STR_ORDER_CONDITIONAL_ACCEPTANCE :Próxima estación {STRING} {STRING}
STR_CONDITIONAL_FREE_PLATFORMS :Saltar á orde {COMMA} cando a próxima estación {STRING} {COMMA} plataforma{P "" s} libre{P "" s}
STR_CONDITIONAL_PERCENT :Saltar á orde {COMMA} {COMMA} porcentaxe das veces
STR_ORDER_CONDITIONAL_NEXT_STATION :Próxima estación
STR_ORDER_CONDITIONAL_CARGO_TOOLTIP :{BLACK}A carga contra a que comparar os datos da estación
STR_ORDER_CONDITIONAL_SLOT_TOOLTIP :{BLACK}O Slot de tren no que comprobar a ocupación
@ -1617,15 +1610,16 @@ STR_ORDER_RV_DIR_SE :[dirección sue
STR_ORDER_RV_DIR_SW :[dirección suroeste]
STR_ORDER_RV_DIR_NW :[dirección noroeste]
STR_ORDER_CONDITIONAL_CARGO_ACCEPTANCE :Saltar á orde {COMMA} cando a próxima estación {STRING} {STRING}
STR_ORDER_CONDITIONAL_CARGO_WAITING_DISPLAY :Saltar á orde {COMMA} cando a pŕoxima estación {STRING} {STRING}
STR_ORDER_CONDITIONAL_PERCENT_DISPLAY :Saltar á orde {COMMA} {COMMA} porcentaxe das veces
STR_ORDER_CONDITIONAL_CARGO_ACCEPTANCE :Saltar á orde {COMMA} cando a {STRING} {STRING} {STRING}
STR_ORDER_CONDITIONAL_CARGO_WAITING_DISPLAY :Saltar á orde {COMMA} cando a {STRING} {STRING} {STRING}
STR_ORDER_CONDITIONAL_SLOT :Saltar á orde {COMMA} cando {TRSLOT} {STRING}
STR_ORDER_CONDITIONAL_INVALID_SLOT :Saltar á orde {COMMA} cando {PUSH_COLOUR}{RED}{STRING} {POP_COLOUR}{STRING}
STR_ORDER_CONDITIONAL_IN_SLOT :Saltar á orde {COMMA} cando {STRING} no slot: {TRSLOT}
STR_ORDER_CONDITIONAL_IN_INVALID_SLOT :Saltar á orde {COMMA} cando {STRING} {PUSH_COLOUR}{RED}{STRING} {POP_COLOUR}
STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE_DISPLAY :Saltar á orde {COMMA} cando o porcentaxe de carga de {STRING} {STRING} {COMMA}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_DISPLAY :Saltar á orde {COMMA} cando {STRING} na próxima estación {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_VIA_DISPLAY :Saltar á orde {COMMA} cando {STRING} na próxima estación vía {STATION} {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_DISPLAY :Saltar á orde {COMMA} cando {STRING} na {STRING} {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_VIA_DISPLAY :Saltar á orde {COMMA} cando {STRING} na {STRING} vía {STRING} {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_COUNTER :Saltar á orde {COMMA} cando o valor de {TRCOUNTER} {STRING} {COMMA}
STR_ORDER_CONDITIONAL_INVALID_COUNTER :Saltar á orde {COMMA} cando o valor de {PUSH_COLOUR}{RED}{STRING}{POP_COLOUR} {STRING} {COMMA}
STR_ORDER_CONDITIONAL_TIME_HHMM :Saltar á orde {COMMA} cando {STRING} {STRING} {TIME_HHMM}

@ -1353,13 +1353,6 @@ STR_ORDER_DROP_SELL_DEPOT :Fahrzeug verkau
STR_ORDER_CONDITIONAL_VEHICLE_IN_SLOT :Fahrzeug im Zeitfenster
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE_ORDER :Wartung erforderlich {STRING}
STR_ORDER_CONDITIONAL_CARGO_WAITING_ORDER :nächste Station {STRING} wartende{G 1 n "" s ""} {STRING}
STR_ORDER_CONDITIONAL_ACCEPTANCE :nächste Station {STRING} {STRING}
STR_CONDITIONAL_FREE_PLATFORMS :Springe zu Auftrag {COMMA} wenn die nächste Station {STRING} {COMMA} freie{P n ""} Bahnsteig{P "" e}
STR_CONDITIONAL_PERCENT :Springe zu Auftrag {COMMA} in {COMMA} Prozent der Fälle
STR_ORDER_CONDITIONAL_NEXT_STATION :nächste Station
STR_ORDER_CONDITIONAL_CARGO_TOOLTIP :{BLACK}Frachtart, die mit der Stationsinformation verglichen wird
STR_ORDER_CONDITIONAL_SLOT_TOOLTIP :{BLACK}Zugslot, dessen Auslastung geprüft wird
@ -1432,15 +1425,16 @@ STR_ORDER_RV_DIR_SE :[Südost-Richtu
STR_ORDER_RV_DIR_SW :[Südwest-Richtung]
STR_ORDER_RV_DIR_NW :[Nordwest-Richtung]
STR_ORDER_CONDITIONAL_CARGO_ACCEPTANCE :Springe zu Auftrag {COMMA}, wenn nächste Station {STRING} {STRING}
STR_ORDER_CONDITIONAL_CARGO_WAITING_DISPLAY :Springe zu Auftrag {COMMA}, wenn nächste Station {STRING} {STRING}
STR_ORDER_CONDITIONAL_PERCENT_DISPLAY :Springe zu Auftrag {COMMA} in {COMMA} Prozent der Fälle
STR_ORDER_CONDITIONAL_CARGO_ACCEPTANCE :Springe zu Auftrag {COMMA}, wenn {STRING} {STRING} {STRING}
STR_ORDER_CONDITIONAL_CARGO_WAITING_DISPLAY :Springe zu Auftrag {COMMA}, wenn {STRING} {STRING} {STRING}
STR_ORDER_CONDITIONAL_SLOT :Springe zu Auftrag {COMMA}, wenn {TRSLOT} {STRING}
STR_ORDER_CONDITIONAL_INVALID_SLOT :Springe zu Auftrag {COMMA}, wenn {PUSH_COLOUR}{RED}{STRING} {POP_COLOUR}{STRING}
STR_ORDER_CONDITIONAL_IN_SLOT :Springe zu Auftrag {COMMA}, wenn {STRING} Slot: {TRSLOT}
STR_ORDER_CONDITIONAL_IN_INVALID_SLOT :Springe zu Auftrag {COMMA}, wenn {STRING} {PUSH_COLOUR}{RED}{STRING} {POP_COLOUR}
STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE_DISPLAY :Springe zu Auftrag {COMMA}, wenn Ladezustand (Prozent) gleich {STRING} {STRING} {COMMA} ist
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_DISPLAY :Springe zu Auftrag {COMMA}, wenn {STRING} bei nächster Station {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_VIA_DISPLAY :Springe zu Auftrag {COMMA}, wenn {STRING} bei nächster Station über {STATION} {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_DISPLAY :Springe zu Auftrag {COMMA}, wenn {STRING} bei {STRING} {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_VIA_DISPLAY :Springe zu Auftrag {COMMA}, wenn {STRING} bei {STRING} über {STRING} {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_COUNTER :Springe zu Auftrag {COMMA}, wenn Wert von {TRCOUNTER} {STRING} {COMMA} ist
STR_ORDER_CONDITIONAL_INVALID_COUNTER :Springe zu Auftrag {COMMA}, wenn Wert von {PUSH_COLOUR}{RED}{STRING}{POP_COLOUR} {STRING} {COMMA} ist
STR_ORDER_CONDITIONAL_TIME_HHMM :Springe zu Auftrag {COMMA}, wenn {STRING} {STRING} {TIME_HHMM}

@ -1513,13 +1513,6 @@ STR_ORDER_DROP_SELL_DEPOT :판매
STR_ORDER_CONDITIONAL_VEHICLE_IN_SLOT :{G=m}슬롯에 있는 차량
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE_ORDER :서비스 {STRING}가 필요함
STR_ORDER_CONDITIONAL_CARGO_WAITING_ORDER :다음 역 {STRING} {STRING} 대기 중
STR_ORDER_CONDITIONAL_ACCEPTANCE :다음 역 {STRING} {STRING}
STR_CONDITIONAL_FREE_PLATFORMS :[조건 경로] {COMMA}번 경로로 건너뛰기 (다음 역에 빈 승강장이 {2:COMMA}개 {1:STRING})
STR_CONDITIONAL_PERCENT :[조건 경로] {COMMA}번 경로로 건너뛰기 ({COMMA}%의 확률로)
STR_ORDER_CONDITIONAL_NEXT_STATION :다음 역:
STR_ORDER_CONDITIONAL_CARGO_TOOLTIP :{BLACK}비교할 화물을 선택하세요
STR_ORDER_CONDITIONAL_SLOT_TOOLTIP :{BLACK}점유되었는지 확인할 슬롯을 선택하세요
@ -1618,15 +1611,12 @@ STR_ORDER_RV_DIR_SE :[남동쪽 방
STR_ORDER_RV_DIR_SW :[남서쪽 방향]
STR_ORDER_RV_DIR_NW :[북서쪽 방향]
STR_ORDER_CONDITIONAL_CARGO_ACCEPTANCE :[조건 경로] {COMMA}번 경로로 건너뛰기 (다음 역이 {2:STRING}{G 2 "을" "를"} {1:STRING})
STR_ORDER_CONDITIONAL_CARGO_WAITING_DISPLAY :[조건 경로] {COMMA}번 경로로 건너뛰기 (다음 역에 {2:STRING}{G 2 "이" "가"} {1:STRING})
STR_ORDER_CONDITIONAL_PERCENT_DISPLAY :[조건 경로] {COMMA}번 경로로 건너뛰기 ({COMMA}%의 확률로)
STR_ORDER_CONDITIONAL_SLOT :[조건 경로] {COMMA}번 경로로 건너뛰기 ({TRSLOT} 슬롯이 {STRING})
STR_ORDER_CONDITIONAL_INVALID_SLOT :[조건 경로] {COMMA}번 경로로 건너뛰기 ({PUSH_COLOUR}{RED}{STRING}{POP_COLOUR} 슬롯이 {STRING})
STR_ORDER_CONDITIONAL_IN_SLOT :[조건 경로] {COMMA}번 경로로 건너뛰기 (열차가 {2:TRSLOT} 슬롯에 {1:STRING})
STR_ORDER_CONDITIONAL_IN_INVALID_SLOT :[조건 경로] {COMMA}번 경로로 건너뛰기 (열차가 {PUSH_COLOUR}{RED}{2:STRING}{POP_COLOUR}{1:STRING})
STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE_DISPLAY :[조건 경로] {COMMA}번 경로로 건너뛰기 ({STRING}의 적재율 {STRING} {COMMA}일 때)
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_DISPLAY :[조건 경로] {COMMA}번 경로로 건너뛰기 (다음 역의 {STRING} 대기량 {STRING} {CARGO_SHORT}일 때)
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_VIA_DISPLAY :[조건 경로] {COMMA}번 경로로 건너뛰기 (다음 역에 있는 {2:STATION} 경유 {1:STRING} {3:STRING} {4:CARGO_SHORT}일 때)
STR_ORDER_CONDITIONAL_COUNTER :[조건 경로] {COMMA}번 경로로 건너뛰기 ({TRCOUNTER}의 값 {STRING} {COMMA}일 때)
STR_ORDER_CONDITIONAL_INVALID_COUNTER :[조건 경로] {COMMA}번 경로로 건너뛰기 ({PUSH_COLOUR}{RED}{STRING}{POP_COLOUR}의 값 {STRING} {COMMA}일 때)
STR_ORDER_CONDITIONAL_TIME_HHMM :[조건 경로] {COMMA}번 경로로 건너뛰기 ({STRING} {STRING} {TIME_HHMM}일 때)

@ -54,9 +54,6 @@ STR_PURCHASE_INFO_DESIGNED :{BLACK}Разр
STR_BUY_REFIT_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Переоборудовать
STR_BUY_REFIT_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Переоборудовать купленное транспортное средство сразу после покупки для выделенного вида груза
STR_CONDITIONAL_FREE_PLATFORMS :Перейти к заданию {COMMA} когда след. станция {STRING} {COMMA} свободн{P ая ые ых} платформ{P а ы ""}
STR_CONDITIONAL_PERCENT :Перейти к заданию {COMMA} {COMMA} процентов времени
STR_ORDER_CONDITIONAL_COMPARATOR_ACCEPTS :принимает
STR_ORDER_CONDITIONAL_COMPARATOR_DOES_NOT_ACCEPT :не принимает
STR_ORDER_CONDITIONAL_COMPARATOR_HAS :имеет
@ -66,6 +63,8 @@ STR_ORDER_CONDITIONAL_COMPARATOR_HAS_LESS_EQUALS :имеет ме
STR_ORDER_CONDITIONAL_COMPARATOR_HAS_MORE_THAN :имеет больше чем
STR_ORDER_CONDITIONAL_COMPARATOR_HAS_MORE_EQUALS :имеет больше или равно
STR_ORDER_CONDITIONAL_PERCENT_DISPLAY :Перейти к заданию {COMMA} {COMMA} процентов времени
# Cargo type orders Window
# Plans window

@ -1422,13 +1422,6 @@ STR_ORDER_DROP_SELL_DEPOT :卖出车辆
STR_ORDER_CONDITIONAL_VEHICLE_IN_SLOT :条目内车辆
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE_ORDER :服务需求 {STRING}
STR_ORDER_CONDITIONAL_CARGO_WAITING_ORDER :下一站 {STRING} {STRING} 等待中
STR_ORDER_CONDITIONAL_ACCEPTANCE :下一站 {STRING} {STRING}
STR_CONDITIONAL_FREE_PLATFORMS :跳转至调度计划 {COMMA} 当下一站 {STRING} {COMMA} 拥有自由站台
STR_CONDITIONAL_PERCENT :跳转至调度计划 {COMMA} {COMMA} 次数百分比
STR_ORDER_CONDITIONAL_NEXT_STATION :下一站
STR_ORDER_CONDITIONAL_CARGO_TOOLTIP :{BLACK}货物对比车站数据
STR_ORDER_CONDITIONAL_SLOT_TOOLTIP :{BLACK}火车槽位检查占用率:
@ -1513,15 +1506,14 @@ STR_ORDER_RV_DIR_SE :[东南方]
STR_ORDER_RV_DIR_SW :[西南方]
STR_ORDER_RV_DIR_NW :[西北方]
STR_ORDER_CONDITIONAL_CARGO_ACCEPTANCE :跳至 {COMMA} [ 当 下一站 {STRING} {STRING}
STR_ORDER_CONDITIONAL_CARGO_WAITING_DISPLAY :跳至 {COMMA} [ 当 下一站 {STRING} {STRING}
STR_ORDER_CONDITIONAL_PERCENT_DISPLAY :跳转至调度计划 {COMMA} {COMMA} 次数百分比
STR_ORDER_CONDITIONAL_CARGO_ACCEPTANCE :跳至 {COMMA} [ 当 {STRING} {STRING} {STRING}
STR_ORDER_CONDITIONAL_CARGO_WAITING_DISPLAY :跳至 {COMMA} [ 当 {STRING} {STRING} {STRING}
STR_ORDER_CONDITIONAL_SLOT :跳至 {COMMA} [ 当 {TRSLOT} {STRING}
STR_ORDER_CONDITIONAL_INVALID_SLOT :跳至 {COMMA} [ 当 {PUSH_COLOUR}{RED}{STRING} {POP_COLOUR}{STRING}
STR_ORDER_CONDITIONAL_IN_SLOT :跳至 {COMMA} [ 当 {STRING} 条目:{TRSLOT}
STR_ORDER_CONDITIONAL_IN_INVALID_SLOT :跳至 {COMMA} [ 当 {STRING} {PUSH_COLOUR}{RED}{STRING} {POP_COLOUR}
STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE_DISPLAY :跳至 {COMMA} [ 当 Load percentage of {STRING} {STRING} {COMMA}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_DISPLAY :跳至 {COMMA} [ 当 {STRING} 在下一站 {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_VIA_DISPLAY :跳至 {COMMA} [ 当 {STRING} 在下一站 经由 {STATION} {STRING} {CARGO_SHORT}
STR_ORDER_CONDITIONAL_COUNTER :跳至 {COMMA} [ 当 值:{TRCOUNTER} {STRING} {COMMA}
STR_ORDER_CONDITIONAL_INVALID_COUNTER :跳至 {COMMA} [ 当 值:{PUSH_COLOUR}{RED}{STRING}{POP_COLOUR} {STRING} {COMMA}
STR_ORDER_CONDITIONAL_TIME_HHMM :跳至 {COMMA} [ 当 {STRING} {STRING} {TIME_HHMM}

@ -71,6 +71,13 @@ void ClearOrderDestinationRefcountMap();
* OCV_DISPATCH_SLOT: Bits 0-15: Dispatch schedule ID
* OCV_PERCENT: Bits 0-7: Jump counter
*/
/*
* xdata2 users:
* OCV_CARGO_WAITING: Bits 0-15: Station ID to test + 1
* OCV_CARGO_ACCEPTANCE: Bits 0-15: Station ID to test + 1
* OCV_FREE_PLATFORMS: Bits 0-15: Station ID to test + 1
* OCV_CARGO_WAITING_AMOUNT: Bits 0-15: Station ID to test + 1
*/
struct OrderExtraInfo {
uint8 cargo_type_flags[NUM_CARGO] = {}; ///< Load/unload types for each cargo type.

@ -1859,7 +1859,7 @@ CommandCost CmdModifyOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
break;
case OT_CONDITIONAL:
if (mof != MOF_COND_VARIABLE && mof != MOF_COND_COMPARATOR && mof != MOF_COND_VALUE && mof != MOF_COND_VALUE_2 && mof != MOF_COND_VALUE_3 && mof != MOF_COND_DESTINATION) return CMD_ERROR;
if (mof != MOF_COND_VARIABLE && mof != MOF_COND_COMPARATOR && mof != MOF_COND_VALUE && mof != MOF_COND_VALUE_2 && mof != MOF_COND_VALUE_3 && mof != MOF_COND_DESTINATION && mof != MOF_COND_STATION_ID) return CMD_ERROR;
break;
case OT_RELEASE_SLOT:
@ -2040,6 +2040,7 @@ CommandCost CmdModifyOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
switch (order->GetConditionVariable()) {
case OCV_CARGO_WAITING_AMOUNT:
if (!(data == NEW_STATION || Station::GetIfValid(data) != nullptr)) return CMD_ERROR;
if (GB(order->GetXData2(), 0, 16) - 1 == data) return CMD_ERROR;
break;
default:
@ -2047,6 +2048,14 @@ CommandCost CmdModifyOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
}
break;
case MOF_COND_STATION_ID:
if (ConditionVariableHasStationID(order->GetConditionVariable())) {
if (Station::GetIfValid(data) == nullptr) return CMD_ERROR;
} else {
return CMD_ERROR;
}
break;
case MOF_COND_DESTINATION:
if (data >= v->GetNumOrders() || data == sel_ord) return CMD_ERROR;
break;
@ -2314,6 +2323,14 @@ CommandCost CmdModifyOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
SB(order->GetXDataRef(), 16, 16, data + 2);
break;
case MOF_COND_STATION_ID:
SB(order->GetXData2Ref(), 0, 16, data + 1);
if (order->GetConditionVariable() == OCV_CARGO_WAITING_AMOUNT && data == GB(order->GetXData(), 16, 16) - 2) {
/* Clear via if station is set to the same ID */
SB(order->GetXDataRef(), 16, 16, 0);
}
break;
case MOF_COND_DESTINATION:
order->SetConditionSkipToOrder(data);
break;
@ -2878,6 +2895,9 @@ void RemoveOrderFromAllVehicles(OrderType type, DestinationID destination, bool
if (type == OT_GOTO_STATION && o->GetConditionVariable() == OCV_CARGO_WAITING_AMOUNT) {
if (GB(order->GetXData(), 16, 16) - 2 == destination) SB(order->GetXDataRef(), 16, 16, INVALID_STATION + 2);
}
if (type == OT_GOTO_STATION && ConditionVariableHasStationID(o->GetConditionVariable())) {
if (GB(order->GetXData2(), 0, 16) - 1 == destination) SB(order->GetXData2Ref(), 0, 16, INVALID_STATION + 1);
}
return false;
}
if (ot == OT_GOTO_DEPOT && (o->GetDepotActionType() & ODATFB_NEAREST_DEPOT) != 0) return false;
@ -3057,22 +3077,6 @@ bool EvaluateDispatchSlotConditionalOrder(const Order *order, const Vehicle *v,
return OrderConditionCompare(order->GetConditionComparator(), value, 0);
}
/** Gets the next 'real' station in the order list
* @param v the vehicle in question
* @param order the current (conditional) order
* @return the StationID of the next valid station in the order list, or INVALID_STATION if there is none.
*/
static StationID GetNextRealStation(const Vehicle *v, const Order *order)
{
const uint max = std::min<uint>(64, v->GetNumOrders());
for (uint i = 0; i < max; i++) {
if (order->IsType(OT_GOTO_STATION) && Station::IsValidID(order->GetDestination())) return order->GetDestination();
order = (order->next != nullptr) ? order->next : v->GetFirstOrder();
}
return INVALID_STATION;
}
static std::vector<TraceRestrictSlotID> _pco_deferred_slot_acquires;
static std::vector<TraceRestrictSlotID> _pco_deferred_slot_releases;
static btree::btree_map<TraceRestrictCounterID, int32> _pco_deferred_counter_values;
@ -3104,12 +3108,12 @@ VehicleOrderID ProcessConditionalOrder(const Order *order, const Vehicle *v, Pro
case OCV_REQUIRES_SERVICE: skip_order = OrderConditionCompare(occ, v->NeedsServicing(), value); break;
case OCV_UNCONDITIONALLY: skip_order = true; break;
case OCV_CARGO_WAITING: {
StationID next_station = GetNextRealStation(v, order);
StationID next_station = GB(order->GetXData2(), 0, 16) - 1;
if (Station::IsValidID(next_station)) skip_order = OrderConditionCompare(occ, (Station::Get(next_station)->goods[value].CargoAvailableCount() > 0), value);
break;
}
case OCV_CARGO_WAITING_AMOUNT: {
StationID next_station = GetNextRealStation(v, order);
StationID next_station = GB(order->GetXData2(), 0, 16) - 1;
if (Station::IsValidID(next_station)) {
if (GB(order->GetXData(), 16, 16) == 0) {
skip_order = OrderConditionCompare(occ, Station::Get(next_station)->goods[value].CargoAvailableCount(), GB(order->GetXData(), 0, 16));
@ -3120,7 +3124,7 @@ VehicleOrderID ProcessConditionalOrder(const Order *order, const Vehicle *v, Pro
break;
}
case OCV_CARGO_ACCEPTANCE: {
StationID next_station = GetNextRealStation(v, order);
StationID next_station = GB(order->GetXData2(), 0, 16) - 1;
if (Station::IsValidID(next_station)) skip_order = OrderConditionCompare(occ, HasBit(Station::Get(next_station)->goods[value].status, GoodsEntry::GES_ACCEPTANCE), value);
break;
}
@ -3177,7 +3181,7 @@ VehicleOrderID ProcessConditionalOrder(const Order *order, const Vehicle *v, Pro
break;
}
case OCV_FREE_PLATFORMS: {
StationID next_station = GetNextRealStation(v, order);
StationID next_station = GB(order->GetXData2(), 0, 16) - 1;
if (Station::IsValidID(next_station)) skip_order = OrderConditionCompare(occ, GetFreeStationPlatforms(next_station), value);
break;
}
@ -3673,7 +3677,7 @@ CommandCost CmdMassChangeOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, u
int index = 0;
bool changed = false;
for(Order *order : v->Orders()) {
for (Order *order : v->Orders()) {
if (order->GetDestination() == from_dest && order->IsType(order_type) &&
!(order_type == OT_GOTO_DEPOT && order->GetDepotActionType() & ODATFB_NEAREST_DEPOT)) {
Order new_order;

@ -35,7 +35,7 @@ inline void UnregisterOrderDestination(const Order *order, VehicleType type, Own
template <typename F> void RemoveVehicleOrdersIf(Vehicle * const v, F order_predicate) {
/* Clear the order from the order-list */
int id = -1;
for(Order *order = v->GetFirstOrder(); order != nullptr; order = order->next) {
for (Order *order = v->GetFirstOrder(); order != nullptr; order = order->next) {
id++;
restart:

@ -989,18 +989,29 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int
}
case OT_CONDITIONAL: {
auto set_station_id = [&order](uint index, StringParameters &sp = _global_string_params) {
const Station *st = Station::GetIfValid(GB(order->GetXData2(), 0, 16) - 1);
if (st == nullptr) {
sp.SetParam(index, STR_ORDER_CONDITIONAL_UNDEFINED_STATION);
} else {
sp.SetParam(index, STR_JUST_STATION);
sp.SetParam(index + 1, st->index);
}
};
SetDParam(1, order->GetConditionSkipToOrder() + 1);
const OrderConditionVariable ocv = order->GetConditionVariable( );
const OrderConditionVariable ocv = order->GetConditionVariable();
/* handle some non-ordinary cases seperately */
if (ocv == OCV_UNCONDITIONALLY) {
SetDParam(0, STR_ORDER_CONDITIONAL_UNCONDITIONAL);
} else if (ocv == OCV_PERCENT) {
SetDParam(0, STR_CONDITIONAL_PERCENT);
SetDParam(0, STR_ORDER_CONDITIONAL_PERCENT_DISPLAY);
SetDParam(2, order->GetConditionValue());
} else if (ocv == OCV_FREE_PLATFORMS) {
SetDParam(0, STR_CONDITIONAL_FREE_PLATFORMS );
SetDParam(2, STR_ORDER_CONDITIONAL_COMPARATOR_HAS + order->GetConditionComparator());
SetDParam(3, order->GetConditionValue());
SetDParam(0, STR_ORDER_CONDITIONAL_FREE_PLATFORMS_DISPLAY);
set_station_id(2);
SetDParam(4, STR_ORDER_CONDITIONAL_COMPARATOR_HAS + order->GetConditionComparator());
SetDParam(5, order->GetConditionValue());
} else if (ocv == OCV_SLOT_OCCUPANCY) {
if (TraceRestrictSlot::IsValidID(order->GetXData())) {
SetDParam(0, STR_ORDER_CONDITIONAL_SLOT);
@ -1046,20 +1057,36 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int
SetDParam(3, STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS + order->GetConditionComparator());
SetDParam(4, order->GetXData());
} else if (ocv == OCV_CARGO_WAITING_AMOUNT) {
char buf[512] = "";
int64 args_array[10] = {};
StringParameters tmp_params(args_array);
StringID substr;
tmp_params.SetParam(0, order->GetConditionSkipToOrder() + 1);
tmp_params.SetParam(1, CargoSpec::Get(order->GetConditionValue())->name);
set_station_id(2, tmp_params);
if (GB(order->GetXData(), 16, 16) == 0) {
SetDParam(0, STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_DISPLAY);
SetDParam(2, CargoSpec::Get(order->GetConditionValue())->name);
SetDParam(3, STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS + order->GetConditionComparator());
SetDParam(4, order->GetConditionValue());
SetDParam(5, GB(order->GetXData(), 0, 16));
substr = STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_DISPLAY;
tmp_params.SetParam(4, STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS + order->GetConditionComparator());
tmp_params.SetParam(5, order->GetConditionValue());
tmp_params.SetParam(6, GB(order->GetXData(), 0, 16));
} else {
SetDParam(0, STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_VIA_DISPLAY);
SetDParam(2, CargoSpec::Get(order->GetConditionValue())->name);
SetDParam(3, GB(order->GetXData(), 16, 16) - 2);
SetDParam(4, STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS + order->GetConditionComparator());
SetDParam(5, order->GetConditionValue());
SetDParam(6, GB(order->GetXData(), 0, 16));
substr = STR_ORDER_CONDITIONAL_CARGO_WAITING_AMOUNT_VIA_DISPLAY;
const Station *via_st = Station::GetIfValid(GB(order->GetXData(), 16, 16) - 2);
if (via_st == nullptr) {
tmp_params.SetParam(4, STR_ORDER_CONDITIONAL_UNDEFINED_STATION);
} else {
tmp_params.SetParam(4, STR_JUST_STATION);
tmp_params.SetParam(5, via_st->index);
}
tmp_params.SetParam(6, STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS + order->GetConditionComparator());
tmp_params.SetParam(7, order->GetConditionValue());
tmp_params.SetParam(8, GB(order->GetXData(), 0, 16));
}
char *end = GetStringWithArgs(buf, substr, &tmp_params, lastof(buf));
_temp_special_strings[0].assign(buf, end);
SetDParam(0, SPECSTR_TEMP_START);
} else if (ocv == OCV_COUNTER_VALUE) {
if (TraceRestrictCounter::IsValidID(GB(order->GetXData(), 16, 16))) {
SetDParam(0, STR_ORDER_CONDITIONAL_COUNTER);
@ -1110,13 +1137,15 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int
switch (ocv) {
case OCV_CARGO_ACCEPTANCE:
SetDParam(0, STR_ORDER_CONDITIONAL_CARGO_ACCEPTANCE);
SetDParam(2, STR_ORDER_CONDITIONAL_COMPARATOR_ACCEPTS + occ - OCC_IS_TRUE);
SetDParam(3, CargoSpec::Get(value)->name);
set_station_id(2);
SetDParam(4, STR_ORDER_CONDITIONAL_COMPARATOR_ACCEPTS + occ - OCC_IS_TRUE);
SetDParam(5, CargoSpec::Get(value)->name);
break;
case OCV_CARGO_WAITING:
SetDParam(0, STR_ORDER_CONDITIONAL_CARGO_WAITING_DISPLAY);
SetDParam(2, STR_ORDER_CONDITIONAL_COMPARATOR_HAS + occ - OCC_IS_TRUE);
SetDParam(3, CargoSpec::Get(value)->name);
set_station_id(2);
SetDParam(4, STR_ORDER_CONDITIONAL_COMPARATOR_HAS + occ - OCC_IS_TRUE);
SetDParam(5, CargoSpec::Get(value)->name);
break;
case OCV_REQUIRES_SERVICE:
SetDParam(3, STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS + occ);
@ -1397,6 +1426,7 @@ private:
OPOS_CONDITIONAL,
OPOS_SHARE,
OPOS_COND_VIA,
OPOS_COND_STATION,
OPOS_CONDITIONAL_RETARGET,
OPOS_DEPARTURE_VIA,
OPOS_END,
@ -1452,6 +1482,9 @@ private:
DP_COND_AUX2_VIA = 0, ///< Display via button
DP_COND_AUX2_SCHED_TEST = 1, ///< Display dropdown for scheduled dispatch test selection
/* WID_O_SEL_COND_AUX3 */
DP_COND_AUX3_STATION = 0, ///< Display station button
/* WID_O_SEL_BOTTOM_LEFT */
DP_BOTTOM_LEFT_SKIP = 0, ///< Display 'skip' in the left button of the bottom row of the vehicle order window.
DP_BOTTOM_LEFT_MANAGE_LIST = 1, ///< Display 'manage list' in the left button of the bottom row of the vehicle order window.
@ -1478,6 +1511,7 @@ private:
int query_text_widget; ///< widget which most recently called ShowQueryString
int current_aux_plane;
int current_aux2_plane;
int current_aux3_plane;
int current_mgmt_plane;
/**
@ -1561,6 +1595,7 @@ private:
HT_NONE, // OPOS_CONDITIONAL
HT_VEHICLE, // OPOS_SHARE
HT_RECT, // OPOS_COND_VIA
HT_RECT, // OPOS_COND_STATION
HT_NONE, // OPOS_CONDITIONAL_RETARGET
HT_RECT, // OPOS_DEPARTURE_VIA
};
@ -1568,6 +1603,7 @@ private:
this->goto_type = type;
this->SetWidgetDirty(WID_O_GOTO);
this->SetWidgetDirty(WID_O_COND_AUX_VIA);
this->SetWidgetDirty(WID_O_COND_AUX_STATION);
this->SetWidgetDirty(WID_O_MGMT_BTN);
}
@ -1826,10 +1862,18 @@ public:
this->SetWidgetLoweredState(WID_O_OCCUPANCY_TOGGLE, _settings_client.gui.show_order_occupancy_by_default);
this->current_aux_plane = SZSP_NONE;
this->current_aux2_plane = SZSP_NONE;
this->current_aux3_plane = SZSP_NONE;
this->current_mgmt_plane = this->GetOrderManagementPlane();
if (v->owner == _local_company) {
this->GetWidget<NWidgetStacked>(WID_O_SEL_COND_AUX)->SetDisplayedPlane(this->current_aux_plane);
this->GetWidget<NWidgetStacked>(WID_O_SEL_COND_AUX2)->SetDisplayedPlane(this->current_aux2_plane);
NWidgetStacked *aux_sel = this->GetWidget<NWidgetStacked>(WID_O_SEL_COND_AUX);
NWidgetStacked *aux2_sel = this->GetWidget<NWidgetStacked>(WID_O_SEL_COND_AUX2);
NWidgetStacked *aux3_sel = this->GetWidget<NWidgetStacked>(WID_O_SEL_COND_AUX3);
aux_sel->independent_planes = true;
aux2_sel->independent_planes = true;
aux3_sel->independent_planes = true;
aux_sel->SetDisplayedPlane(this->current_aux_plane);
aux2_sel->SetDisplayedPlane(this->current_aux2_plane);
aux3_sel->SetDisplayedPlane(this->current_aux3_plane);
this->GetWidget<NWidgetStacked>(WID_O_SEL_MGMT)->SetDisplayedPlane(this->current_mgmt_plane);
}
this->FinishInitNested(v->index);
@ -2072,26 +2116,37 @@ public:
NWidgetStacked *aux_sel = this->GetWidget<NWidgetStacked>(WID_O_SEL_COND_AUX);
NWidgetStacked *aux2_sel = this->GetWidget<NWidgetStacked>(WID_O_SEL_COND_AUX2);
NWidgetStacked *aux3_sel = this->GetWidget<NWidgetStacked>(WID_O_SEL_COND_AUX3);
NWidgetStacked *mgmt_sel = this->GetWidget<NWidgetStacked>(WID_O_SEL_MGMT);
mgmt_sel->SetDisplayedPlane(this->GetOrderManagementPlane());
auto aux_plane_guard = scope_guard([&]() {
bool reinit = false;
if (this->current_aux_plane != aux_sel->shown_plane) {
this->current_aux_plane = aux_sel->shown_plane;
this->ReInit();
reinit = true;
}
if (this->current_aux2_plane != aux2_sel->shown_plane) {
this->current_aux2_plane = aux2_sel->shown_plane;
this->ReInit();
reinit = true;
}
if (this->current_aux3_plane != aux3_sel->shown_plane) {
this->current_aux3_plane = aux3_sel->shown_plane;
reinit = true;
}
if ((this->current_mgmt_plane == SZSP_NONE) != (mgmt_sel->shown_plane == SZSP_NONE)) {
this->current_mgmt_plane = mgmt_sel->shown_plane;
this->ReInit();
reinit = true;
} else if (this->current_mgmt_plane != mgmt_sel->shown_plane) {
this->current_mgmt_plane = mgmt_sel->shown_plane;
}
if (reinit) this->ReInit();
});
aux_sel->SetDisplayedPlane(SZSP_NONE);
aux2_sel->SetDisplayedPlane(SZSP_NONE);
aux3_sel->SetDisplayedPlane(SZSP_NONE);
if (order == nullptr) {
if (row_sel != nullptr) {
row_sel->SetDisplayedPlane(DP_ROW_LOAD);
@ -2239,6 +2294,12 @@ public:
aux2_sel->SetDisplayedPlane(SZSP_NONE);
}
if (ConditionVariableHasStationID(ocv)) {
aux3_sel->SetDisplayedPlane(DP_COND_AUX3_STATION);
} else {
aux3_sel->SetDisplayedPlane(SZSP_NONE);
}
/* Set the strings for the dropdown boxes. */
this->GetWidget<NWidgetCore>(WID_O_COND_VARIABLE)->widget_data = OrderStringForVariable(this->vehicle, ocv);
this->GetWidget<NWidgetCore>(WID_O_COND_COMPARATOR)->widget_data = GetComparatorStrings(this->vehicle, order)[order->GetConditionComparator()];
@ -2321,8 +2382,10 @@ public:
if (this->vehicle->owner != _local_company) {
this->selected_order = -1; // Disable selection any selected row at a competitor order window.
} else {
this->SetWidgetLoweredState(WID_O_GOTO, this->goto_type != OPOS_NONE && this->goto_type != OPOS_COND_VIA && this->goto_type != OPOS_CONDITIONAL_RETARGET);
this->SetWidgetLoweredState(WID_O_GOTO, this->goto_type != OPOS_NONE && this->goto_type != OPOS_COND_VIA
&& this->goto_type != OPOS_COND_STATION && this->goto_type != OPOS_CONDITIONAL_RETARGET);
this->SetWidgetLoweredState(WID_O_COND_AUX_VIA, this->goto_type == OPOS_COND_VIA);
this->SetWidgetLoweredState(WID_O_COND_AUX_STATION, this->goto_type == OPOS_COND_STATION);
this->SetWidgetLoweredState(WID_O_MGMT_BTN, this->goto_type == OPOS_CONDITIONAL_RETARGET);
}
this->DrawWidgets();
@ -2776,7 +2839,7 @@ public:
this->OrderClick_Goto(OPOS_GOTO);
}
} else {
if (this->goto_type == OPOS_COND_VIA) ResetObjectToPlace();
if (this->goto_type == OPOS_COND_VIA || this->goto_type == OPOS_COND_STATION) ResetObjectToPlace();
int sel;
switch (this->goto_type) {
case OPOS_NONE: sel = -1; break;
@ -2934,6 +2997,15 @@ public:
break;
}
case WID_O_COND_AUX_STATION: {
if (this->goto_type != OPOS_NONE) {
ResetObjectToPlace();
} else {
this->OrderClick_Goto(OPOS_COND_STATION);
}
break;
}
case WID_O_TIMETABLE_VIEW:
ShowTimetableWindow(this->vehicle);
break;
@ -3364,7 +3436,7 @@ public:
/* With quick goto the Go To button stays active */
if (!_settings_client.gui.quick_goto) ResetObjectToPlace();
}
} else if (this->goto_type == OPOS_COND_VIA) {
} else if (this->goto_type == OPOS_COND_VIA || this->goto_type == OPOS_COND_STATION) {
if (IsTileType(tile, MP_STATION) || IsTileType(tile, MP_INDUSTRY)) {
const Station *st = nullptr;
@ -3375,7 +3447,7 @@ public:
st = in->neutral_station;
}
if (st != nullptr && IsInfraUsageAllowed(this->vehicle->type, this->vehicle->owner, st->owner)) {
if (this->ModifyOrder(this->OrderGetSel(), MOF_COND_VALUE_3 | st->index << 8)) {
if (this->ModifyOrder(this->OrderGetSel(), (this->goto_type == OPOS_COND_VIA ? MOF_COND_VALUE_3 : MOF_COND_STATION_ID) | st->index << 8)) {
ResetObjectToPlace();
}
}
@ -3462,6 +3534,7 @@ public:
this->goto_type = OPOS_NONE;
this->SetWidgetDirty(WID_O_GOTO);
this->SetWidgetDirty(WID_O_COND_AUX_VIA);
this->SetWidgetDirty(WID_O_COND_AUX_STATION);
this->SetWidgetDirty(WID_O_MGMT_BTN);
/* Remove drag highlighting if it exists. */
@ -3622,6 +3695,10 @@ static const NWidgetPart _nested_orders_train_widgets[] = {
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_O_COND_SCHED_SELECT), SetMinimalSize(124, 12), SetFill(1, 0),
SetDataTip(STR_NULL, STR_ORDER_CONDITIONAL_SCHED_SELECT_TOOLTIP), SetResize(1, 0),
EndContainer(),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_O_SEL_COND_AUX3),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_O_COND_AUX_STATION), SetMinimalSize(72, 12),
SetDataTip(STR_ORDER_CONDITIONAL_STATION, STR_ORDER_CONDITIONAL_STATION_TOOLTIP),
EndContainer(),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_O_SEL_COND_AUX2),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_O_COND_AUX_VIA), SetMinimalSize(36, 12),
SetDataTip(STR_ORDER_CONDITIONAL_VIA, STR_ORDER_CONDITIONAL_VIA_TOOLTIP),
@ -3766,6 +3843,10 @@ static const NWidgetPart _nested_orders_widgets[] = {
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_O_COND_SCHED_SELECT), SetMinimalSize(124, 12), SetFill(1, 0),
SetDataTip(STR_NULL, STR_ORDER_CONDITIONAL_SCHED_SELECT_TOOLTIP), SetResize(1, 0),
EndContainer(),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_O_SEL_COND_AUX3),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_O_COND_AUX_STATION), SetMinimalSize(72, 12),
SetDataTip(STR_ORDER_CONDITIONAL_STATION, STR_ORDER_CONDITIONAL_STATION_TOOLTIP),
EndContainer(),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_O_SEL_COND_AUX2),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_O_COND_AUX_VIA), SetMinimalSize(36, 12),
SetDataTip(STR_ORDER_CONDITIONAL_VIA, STR_ORDER_CONDITIONAL_VIA_TOOLTIP),

@ -165,14 +165,14 @@ enum OrderConditionVariable {
OCV_UNCONDITIONALLY, ///< Always skip
OCV_REMAINING_LIFETIME, ///< Skip based on the remaining lifetime
OCV_MAX_RELIABILITY, ///< Skip based on the maximum reliability
OCV_CARGO_WAITING, ///< Skip if specified cargo is waiting at next station
OCV_CARGO_ACCEPTANCE, ///< Skip if specified cargo is accepted at next station
OCV_FREE_PLATFORMS, ///< Skip based on free platforms at next station
OCV_CARGO_WAITING, ///< Skip if specified cargo is waiting at station
OCV_CARGO_ACCEPTANCE, ///< Skip if specified cargo is accepted at station
OCV_FREE_PLATFORMS, ///< Skip based on free platforms at station
OCV_PERCENT, ///< Skip xx percent of times
OCV_SLOT_OCCUPANCY, ///< Test if vehicle slot is fully occupied, or empty
OCV_VEH_IN_SLOT, ///< Test if vehicle is in slot
OCV_CARGO_LOAD_PERCENTAGE, ///< Skip based on the amount of load of a specific cargo
OCV_CARGO_WAITING_AMOUNT, ///< Skip based on the amount of a specific cargo waiting at next station
OCV_CARGO_WAITING_AMOUNT, ///< Skip based on the amount of a specific cargo waiting at station
OCV_COUNTER_VALUE, ///< Skip based on counter value
OCV_TIME_DATE, ///< Skip based on current time/date
OCV_TIMETABLE, ///< Skip based on timetable state
@ -180,6 +180,11 @@ enum OrderConditionVariable {
OCV_END
};
inline bool ConditionVariableHasStationID(OrderConditionVariable ocv)
{
return ocv == OCV_CARGO_WAITING || ocv == OCV_CARGO_ACCEPTANCE || ocv == OCV_FREE_PLATFORMS || ocv == OCV_CARGO_WAITING_AMOUNT;
}
/**
* Comparator for the skip reasoning.
*/
@ -210,6 +215,7 @@ enum ModifyOrderFlags {
MOF_COND_VALUE, ///< The value to set the condition to.
MOF_COND_VALUE_2, ///< The secondary value to set the condition to.
MOF_COND_VALUE_3, ///< The tertiary value to set the condition to.
MOF_COND_STATION_ID, ///< The station ID to set the condition to.
MOF_COND_DESTINATION,///< Change the destination of a conditional order.
MOF_WAYPOINT_FLAGS, ///< Change the waypoint flags
MOF_CARGO_TYPE_UNLOAD, ///< Passes an OrderUnloadType and a CargoID.

@ -3982,12 +3982,41 @@ bool AfterLoadGame()
if (SlXvIsFeaturePresent(XSLFI_MORE_COND_ORDERS, 1, 1)) {
for (Order *order : Order::Iterate()) {
// Insertion of OCV_MAX_RELIABILITY between OCV_REMAINING_LIFETIME and OCV_CARGO_WAITING
/* Insertion of OCV_MAX_RELIABILITY between OCV_REMAINING_LIFETIME and OCV_CARGO_WAITING */
if (order->IsType(OT_CONDITIONAL) && order->GetConditionVariable() > OCV_REMAINING_LIFETIME) {
order->SetConditionVariable(static_cast<OrderConditionVariable>((uint)order->GetConditionVariable() + 1));
}
}
}
if (SlXvIsFeaturePresent(XSLFI_MORE_COND_ORDERS, 1, 14)) {
for (OrderList *order_list : OrderList::Iterate()) {
auto get_real_station = [&order_list](const Order *order) -> StationID {
const uint max = std::min<uint>(64, order_list->GetNumOrders());
for (uint i = 0; i < max; i++) {
if (order->IsType(OT_GOTO_STATION) && Station::IsValidID(order->GetDestination())) return order->GetDestination();
order = (order->next != nullptr) ? order->next : order_list->GetFirstOrder();
}
return INVALID_STATION;
};
for (Order *order = order_list->GetFirstOrder(); order != nullptr; order = order->next) {
/* Fixup station ID for OCV_CARGO_WAITING, OCV_CARGO_ACCEPTANCE, OCV_FREE_PLATFORMS, OCV_CARGO_WAITING_AMOUNT */
if (order->IsType(OT_CONDITIONAL) && ConditionVariableHasStationID(order->GetConditionVariable())) {
StationID next_id = get_real_station(order);
SB(order->GetXData2Ref(), 0, 16, next_id + 1);
if (next_id != INVALID_STATION && GB(order->GetXData(), 16, 16) - 2 == next_id) {
/* Duplicate next and via, remove via */
SB(order->GetXDataRef(), 16, 16, 0);
}
if (GB(order->GetXData(), 16, 16) != 0 && !Station::IsValidID(GB(order->GetXData(), 16, 16) - 2)) {
/* Via station is invalid */
SB(order->GetXDataRef(), 16, 16, INVALID_STATION + 2);
}
}
}
}
}
if (SlXvIsFeatureMissing(XSLFI_CONSIST_SPEED_RD_FLAG)) {
for (Train *t : Train::Iterate()) {

@ -103,7 +103,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
{ XSLFI_INFRA_SHARING, XSCF_NULL, 2, 2, "infra_sharing", nullptr, nullptr, "CPDP" },
{ XSLFI_VARIABLE_DAY_LENGTH, XSCF_NULL, 3, 3, "variable_day_length", nullptr, nullptr, nullptr },
{ XSLFI_ORDER_OCCUPANCY, XSCF_NULL, 2, 2, "order_occupancy", nullptr, nullptr, nullptr },
{ XSLFI_MORE_COND_ORDERS, XSCF_NULL, 14, 14, "more_cond_orders", nullptr, nullptr, nullptr },
{ XSLFI_MORE_COND_ORDERS, XSCF_NULL, 15, 15, "more_cond_orders", nullptr, nullptr, nullptr },
{ XSLFI_EXTRA_LARGE_MAP, XSCF_NULL, 0, 1, "extra_large_map", nullptr, nullptr, nullptr },
{ XSLFI_REVERSE_AT_WAYPOINT, XSCF_NULL, 1, 1, "reverse_at_waypoint", nullptr, nullptr, nullptr },
{ XSLFI_VEH_LIFETIME_PROFIT, XSCF_NULL, 1, 1, "veh_lifetime_profit", nullptr, nullptr, nullptr },

@ -45,6 +45,7 @@ enum OrderWidgets {
WID_O_COND_SCHED_SELECT, ///< Choose scheduled dispatch schedule.
WID_O_COND_AUX_VIA, ///< Condition via button.
WID_O_COND_SCHED_TEST, ///< Choose scheduled dispatch test.
WID_O_COND_AUX_STATION, ///< Condition station button.
WID_O_RELEASE_SLOT, ///< Choose slot to release.
WID_O_COUNTER_OP, ///< Choose counter operation.
WID_O_CHANGE_COUNTER, ///< Choose counter to change.
@ -54,6 +55,7 @@ enum OrderWidgets {
WID_O_SEL_COND_VALUE, ///< Widget for conditional value or conditional cargo type.
WID_O_SEL_COND_AUX, ///< Widget for auxiliary conditional cargo type.
WID_O_SEL_COND_AUX2, ///< Widget for auxiliary conditional via button.
WID_O_SEL_COND_AUX3, ///< Widget for auxiliary conditional station button.
WID_O_SEL_MGMT, ///< Widget for management buttons.
WID_O_SEL_TOP_LEFT, ///< #NWID_SELECTION widget for left part of the top row of the 'your train' order window.
WID_O_SEL_TOP_MIDDLE, ///< #NWID_SELECTION widget for middle part of the top row of the 'your train' order window.

Loading…
Cancel
Save