From ed1457dca335a68b74603b619584eff9f7231ef4 Mon Sep 17 00:00:00 2001 From: glx22 Date: Fri, 27 May 2022 17:54:41 +0200 Subject: [PATCH] Fix 55170ae: [Script] Building two-way signals could end up one-way --- regression/regression/main.nut | 24 +++++++++++++++++ regression/regression/result.txt | 44 ++++++++++++++++++++++++-------- src/script/api/script_rail.cpp | 2 ++ 3 files changed, 60 insertions(+), 10 deletions(-) diff --git a/regression/regression/main.nut b/regression/regression/main.nut index f32c708614..9b68226953 100644 --- a/regression/regression/main.nut +++ b/regression/regression/main.nut @@ -1023,6 +1023,30 @@ function Regression::Rail() print(" IsRailTile(): " + AIRail.IsRailTile(10002)); print(" BuildRailTrack(): " + AIRail.BuildRailTrack(10002, AIRail.RAILTRACK_NW_SE)); print(" BuildSignal(): " + AIRail.BuildSignal(10002, 10258, AIRail.SIGNALTYPE_PBS)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10258)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 9746)); + print(" RemoveSignal(): " + AIRail.RemoveSignal(10002, 10258)); + print(" BuildSignal(): " + AIRail.BuildSignal(10002, 9746, AIRail.SIGNALTYPE_ENTRY)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10258)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 9746)); + print(" RemoveSignal(): " + AIRail.RemoveSignal(10002, 9746)); + print(" BuildSignal(): " + AIRail.BuildSignal(10002, 9746, AIRail.SIGNALTYPE_EXIT_TWOWAY)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10258)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 9746)); + print(" RemoveRailTrack(): " + AIRail.RemoveRailTrack(10002, AIRail.RAILTRACK_NW_NE)); + print(" RemoveRailTrack(): " + AIRail.RemoveRailTrack(10002, AIRail.RAILTRACK_NW_SE)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(10002, AIRail.RAILTRACK_NW_NE)); + print(" BuildSignal(): " + AIRail.BuildSignal(10002, 10003, AIRail.SIGNALTYPE_PBS)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10003)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10001)); + print(" RemoveSignal(): " + AIRail.RemoveSignal(10002, 10003)); + print(" BuildSignal(): " + AIRail.BuildSignal(10002, 10001, AIRail.SIGNALTYPE_ENTRY)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10003)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10001)); + print(" RemoveSignal(): " + AIRail.RemoveSignal(10002, 10001)); + print(" BuildSignal(): " + AIRail.BuildSignal(10002, 10001, AIRail.SIGNALTYPE_EXIT_TWOWAY)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10003)); + print(" GetSignalType(): " + AIRail.GetSignalType(10002, 10001)); print(" RemoveRailTrack(): " + AIRail.RemoveRailTrack(10002, AIRail.RAILTRACK_NW_NE)); print(" RemoveRailTrack(): " + AIRail.RemoveRailTrack(10002, AIRail.RAILTRACK_NW_SE)); print(" BuildRail(): " + AIRail.BuildRail(10002, 10003, 10006)); diff --git a/regression/regression/result.txt b/regression/regression/result.txt index 984c1de82b..cca295fa01 100644 --- a/regression/regression/result.txt +++ b/regression/regression/result.txt @@ -7411,8 +7411,32 @@ ERROR: IsEnd() is invalid as Begin() is never called IsRailTile(): false BuildRailTrack(): true BuildSignal(): true + GetSignalType(): 4 + GetSignalType(): 255 + RemoveSignal(): true + BuildSignal(): true + GetSignalType(): 255 + GetSignalType(): 1 + RemoveSignal(): true + BuildSignal(): true + GetSignalType(): 10 + GetSignalType(): 10 RemoveRailTrack(): false RemoveRailTrack(): true + BuildRailTrack(): true + BuildSignal(): false + GetSignalType(): 255 + GetSignalType(): 255 + RemoveSignal(): false + BuildSignal(): true + GetSignalType(): 255 + GetSignalType(): 1 + RemoveSignal(): true + BuildSignal(): true + GetSignalType(): 255 + GetSignalType(): 10 + RemoveRailTrack(): true + RemoveRailTrack(): false BuildRail(): true HasTransportType(): true HasTransportType(): false @@ -9272,12 +9296,12 @@ ERROR: IsEnd() is invalid as Begin() is never called GetLocation(): 33417 GetEngineType(): 153 GetUnitNumber(): 1 - GetAge(): 1 + GetAge(): 0 GetMaxAge(): 5490 - GetAgeLeft(): 5489 + GetAgeLeft(): 5490 GetCurrentSpeed(): 7 GetRunningCost(): 421 - GetProfitThisYear(): -1 + GetProfitThisYear(): 0 GetProfitLastYear(): 0 GetCurrentValue(): 5947 GetVehicleType(): 1 @@ -9287,7 +9311,7 @@ ERROR: IsEnd() is invalid as Begin() is never called IsInDepot(): false GetNumWagons(): 1 GetWagonEngineType(): 153 - GetWagonAge(): 1 + GetWagonAge(): 0 GetLength(): 8 GetOwner(): 1 BuildVehicle(): 14 @@ -9360,11 +9384,11 @@ ERROR: IsEnd() is invalid as Begin() is never called 14 => 1 12 => 1 Age ListDump: + 17 => 1 + 16 => 1 + 14 => 1 13 => 1 12 => 1 - 17 => 0 - 16 => 0 - 14 => 0 MaxAge ListDump: 16 => 10980 14 => 10980 @@ -9372,9 +9396,9 @@ ERROR: IsEnd() is invalid as Begin() is never called 13 => 5490 12 => 5490 AgeLeft ListDump: - 16 => 10980 - 14 => 10980 - 17 => 7320 + 16 => 10979 + 14 => 10979 + 17 => 7319 13 => 5489 12 => 5489 CurrentSpeed ListDump: diff --git a/src/script/api/script_rail.cpp b/src/script/api/script_rail.cpp index 4dc06553d0..462dc1311a 100644 --- a/src/script/api/script_rail.cpp +++ b/src/script/api/script_rail.cpp @@ -463,6 +463,8 @@ static bool IsValidSignalType(int signal_type) if (signal < SIGNALTYPE_TWOWAY) { if (signal != SIGNALTYPE_PBS && signal != SIGNALTYPE_PBS_ONEWAY) signal_cycles++; + } else { + signal_cycles = 0; } ::SignalType sig_type = (::SignalType)(signal >= SIGNALTYPE_TWOWAY ? signal ^ SIGNALTYPE_TWOWAY : signal);