-
Posts
255 -
Joined
-
Last visited
-
Days Won
2
Everything posted by jeroezie
-
Remove a station stop from an existing screnario
jeroezie replied to ianparkinson62's topic in LUA Scripting
First you want to make a copy of the scenery folder and the scenario inside it. This does multiple things: You wan to keep an unaltered/safe copy of the in game files as a back up; The default in game sceneries/scenario's do not show up in the editor. So go to D:\SteamLibrary\steamapps\common\SimRail\SimRail_Data\StreamingAssets\Sceneries. Their you can see a list of all Sceneries. Make a copy of 1_KatowiceWarszawa under a different name. Then go to the single player menu of the game (if you had already done that in the background, re open the SP menu to update the contents). Now you should see two versions of the same Katowice Warszawa scenery. That is not so handy. You can alter the name. To do this, you can use the editor, since it wont show the in game original anyways you are sure to alter the correct scenery. Or go to the new scenery and open the SceneryManifest.xml file, then alter the ThumbnailText or the translations for the ThumbnailText. Using the in game editor to change ThumbnailTextKey is the simplest. Then you need to alter the schedule file, that is an xml file, they usually life inside the 'Timetables' folder, the file is in this case named 'M8.xml'. Look for the WayPointFromXml for the ph, Warszawa Wschodnia, you want out. Then change the StopType from 'commercialStop' to 'noStopover', then the WayPointFormXml for Wschodnia looks like this: <WayPointFromXml> <NameOfPoint>Warszawa Wschodnia</NameOfPoint> <DisplayName>Warszawa Wschodnia</DisplayName> <StopType>commercialStop</StopType> <Line>0</Line> <Mileage>0</Mileage> <TrainType>MPE</TrainType> <StationCategory>A</StationCategory> <StationSpeedLimit>0</StationSpeedLimit> <ArrivalTime>180</ArrivalTime> <DepartureTime>360</DepartureTime> <RadioChanels> <int>2</int> </RadioChanels> <plannedStop>0</plannedStop> <leftTrack>0</leftTrack> <track>0</track> <platform/> </WayPointFromXml> Alternatively, you could simply delete the section where you want the stop to disappear, but that is a bit silly. You can change the 'paper' schedule too, that are the pictures displayed in cab, but those do not have any technical function and are more for show and roleplaying. This scenario does not have any. If you would run the scenario now, you will see that the HUD shows Warszawa Wschodnia as a non stopping point where you loose 3 minutes, somehow. You can change the ArrivalTime and DepartureTime too, to the same value, for example 180 to 240 and 360 to 240. Timings further down the scenario will remain the same, so I suggest not change those, unless you want to shave off a few minutes of the whole scenario (which is a lot of work). Now you can run the scenaario, prefarably using the editor, then you have access to the DEV tools (default key bind F8). You will notice getting stuck at the platform signal, number J4 (you can see this on the number plate at the signal post), in code its called "WSD_J4". WSD is short for Warszawa Wschodnia. Now open the mission.lua file in the scenario folder. Look for the following code, it is in the function called Triggers(): CreateSignalTrigger(FindSignal("WSD_J4"), 600, { check = PlayerTrainsetCheck, result = function(trainset) CreateCoroutine(function () coroutine.yield(CoroutineYields.WaitForTrainsetPassengerExchangeFinished, RailstockGetPlayerTrainset(), TimeSpanCreate(0, 0, 0, 30, 0)) CreateRoute("WSD_J4", "WSD_Akps", VDOrderType.TrainRoute) CreateRoute("WDC_W", "WDC_J", VDOrderType.TrainRoute) end) end }) The code 'coroutine.yield' is used to wait/check for something, in this case 'oroutineYields.WaitForTrainsetPassengerExchangeFinished'. But since we have removed the ph, their is no passenger exchange to finish anymore. We need to alter this code. One could change the condition within the 'coroutine.yield', but that is complex. The code that starts with 'CreateRoute' is used to set the signals. Those two bits, are the thing we need. I recommend to comment out the whole signal trigger, put '--[[' before the first line of the signal trigger, and put ']]' after the list line (first and last line of the code snippet above). this causes the code to become inactive, but you can still see it in the file, so you have a reference to what it was and could easily revert back. To clear the signal, you have multiple options: Make your own signal trigger (or use a track trigger of radio call, but that is more complex). Put the code to clear the signal with the code that clears the signal before. I will first explain the first option, making your own signal trigger, since you can do that almost everywhere. Open the scenario using the editor, so you can use DEV tools. Open them (probably press F8) and look for the 'LUA developer', then click on 'track details'. You should see a part 'SIGNALS'. If you click on those buttons, the game will spit out a ready made signal trigger you your clipboard, which you can past directly inside the mission.lua file. Now go to the location where you like the trigger to be, for example, at some distance before the J4 signal, you can drive or walk their, but their is a very handy freefly option under the main camera menu (which does not work if you where not in a train before, so use it after leaving your train, in this scenario you spawn inside the drivers seat so this can not go wrong). Past it below the old signal trigger, that you commented out. I copied the following signal trigger, which I pasted below the old one: function Triggers() --[[CreateSignalTrigger(FindSignal("WSD_J4"), 600, { check = PlayerTrainsetCheck, result = function(trainset) CreateCoroutine(function () coroutine.yield(CoroutineYields.WaitForTrainsetPassengerExchangeFinished, RailstockGetPlayerTrainset(), TimeSpanCreate(0, 0, 0, 30, 0)) CreateRoute("WSD_J4", "WSD_Akps", VDOrderType.TrainRoute) CreateRoute("WDC_W", "WDC_J", VDOrderType.TrainRoute) end) end })]] CreateSignalTrigger(FindSignal("WSD_J4"), 136, { check = function (trainset) return true end, result = function(trainset) end }) Now in-between the line 'result = function(trainset)' and 'end', make some working space for yourself by inserting some blank lines. Then you can copy the 'CreateRoute' commands from the old trigger. But I will explain how to make your own ones too, so you can make it however your like it. Open the 'routes' tab in the LUA developer. The game will, after some time or walking if it does not work, show a list of routes the game can set. maneuver is used for shunting or train for train movements (you can manually change the 'VDOrderType' to 'VDOrderType.Substitute' if you want to show an Sz signal). Click the checkbox for the route you want to set and then on enable selected route now. Their is a release option below the lift if you do not like the route. If you like it, use 'copy command to enable selected' and paste it into the mission.lua file. For example: --[[CreateSignalTrigger(FindSignal("WSD_J4"), 600, { check = PlayerTrainsetCheck, result = function(trainset) CreateCoroutine(function () coroutine.yield(CoroutineYields.WaitForTrainsetPassengerExchangeFinished, RailstockGetPlayerTrainset(), TimeSpanCreate(0, 0, 0, 30, 0)) CreateRoute("WSD_J4", "WSD_Akps", VDOrderType.TrainRoute) CreateRoute("WDC_W", "WDC_J", VDOrderType.TrainRoute) end) end })]] CreateSignalTrigger(FindSignal("WSD_J4"), 136, { check = function(trainset) return true end, result = function(trainset) VDSetRouteWithVariant("WSD_J4", "WSD_Akps", VDOrderType.TrainRoute, { GetMidPointVariant("z1335", false), GetMidPointVariant("WSD_11cd", true), GetMidPointVariant("WSD_11ab", false), GetMidPointVariant("WSD_7cd", false), GetMidPointVariant("WSD_7ab", false), GetMidPointVariant("z1333", false) }) end }) You have probably noticed, that the LUA developer tool spits out a 'VDSetRouteWithVariant()' or 'VDSetRoute()' command, not a 'CreateRoute()' command. That is because the 'CreateRoute()' is made to work using a libary, not standard present in a scenario. But Eridor (SimKol's magical scenario making dragon) has made those library's and the CreateRoute thingy inside them to provide more flexibility and especially reliability then the game had before (the VDSetRoute will only attempt to set the route once, while CreateRoute will by deafalut try 10 times. This can come in vary handy when you have bot trains driving in the way of the player). You can use one of both. Keep in mind, that CreateRoute will only work inside a the Coroutine. If its already inside a Coroutine, its usually very simple, you can replace the work 'VDSetRoute' with CreateRoute and 'VDSetRouteWithVariant' with 'CreateRouteVariant'. If its not in a Coroutine yet, put 'CreateCoroutine(function ()' before the CreateRoute command(s) and then 'end)' behind it, to end the Coroutine. If you use CreateRoute, make sure the Eridor library is included in the mission.lua file, it is most likely already their if its an in game scenario (Eridor has put in the work to update the old scneario's), its 'require("../../libs/EridorCommon")'. Or simply use the VDSetRoute that the LUA developer spits out. Easy coding but more debugging, which can be annoying with long scenario's. But this example is at the very start. This is what I made, with first commened out the VDSetRouteWithVariant, and then CreateRouteVariant inside a Coroutine: CreateSignalTrigger(FindSignal("WSD_J4"), 136, { check = function(trainset) return true end, result = function(trainset) --[[VDSetRouteWithVariant("WSD_J4", "WSD_Akps", VDOrderType.TrainRoute, { GetMidPointVariant("z1335", false), GetMidPointVariant("WSD_11cd", true), GetMidPointVariant("WSD_11ab", false), GetMidPointVariant("WSD_7cd", false), GetMidPointVariant("WSD_7ab", false), GetMidPointVariant("z1333", false) }) ]] CreateCoroutine(function() CreateRouteVariant("WSD_J4", "WSD_Akps", VDOrderType.TrainRoute, { GetMidPointVariant("z1335", false), GetMidPointVariant("WSD_11cd", true), GetMidPointVariant("WSD_11ab", false), GetMidPointVariant("WSD_7cd", false), GetMidPointVariant("WSD_7ab", false), GetMidPointVariant("z1333", false) }) end) end }) You can adjust the distance to the signal by changing the number behind 'CreateSignalTrigger(FindSignal("WSD_J4"),', since 136 m is a bit late. Now if you would like to clear the signal, when you call the dispatcher at scenario start. You can simply cut the CreateRoute from the old signal trigger, and paste them in the code that clears the signal at the spawn point. You can find that code by looking up the start signal or the signal where you end up (since you set a route from aa signal to a signal or to the free track), please use a program where you can look for a specific word (the wiki has instructions on how to setup Viusal Studio Code, which is great and recommended by the dev team). You spawn at signal L16, which is called in code "WSD_L16". You can find it here: function OnPlayerRadioCall(trainsetInfo, radio_SelectionCall) Log("Call pressed in " .. trainsetInfo.name .. ". Call type: " .. tostring(radio_SelectionCall) .. ", Step: " .. tostring(ScenarioStep)) if (ScenarioStep == "Start") then if (RailstockGetPlayerTrainset().GetCurrentlyUsedChannel() == 2) then ScenarioStep = 0 CreateCoroutine(function() CommsOldJson("#Caller_You", "Check_train_radio_Lua", "Warszawa Wschodnia", "14103") CommsOldJson("WSD", "Rec_loudnclear_Lua", "Warszawa Wschodnia") CommsOldJson("#Caller_You", "Ready_2_go_Lua", "Warszawa Wschodnia", "14103") CommsOldJson("WSD", "Thanku_semaph") coroutine.yield(CoroutineYields.WaitUntil, function() return VDLoaded end) CreateRoute("WSD_L16", "WSD_J4", VDOrderType.TrainRoute) end) else CreateCoroutine(function() coroutine.yield(CoroutineYields.WaitForSeconds, 0.1) ShowUseRadioNotification() Comms(false, "StaticNoise") end) end end You command we are looking for is 'CreateRoute("WSD_L16", "WSD_J4", VDOrderType.TrainRoute)'. Paste the before it, so you get this: function OnPlayerRadioCall(trainsetInfo, radio_SelectionCall) Log("Call pressed in " .. trainsetInfo.name .. ". Call type: " .. tostring(radio_SelectionCall) .. ", Step: " .. tostring(ScenarioStep)) if (ScenarioStep == "Start") then if (RailstockGetPlayerTrainset().GetCurrentlyUsedChannel() == 2) then ScenarioStep = 0 CreateCoroutine(function() CommsOldJson("#Caller_You", "Check_train_radio_Lua", "Warszawa Wschodnia", "14103") CommsOldJson("WSD", "Rec_loudnclear_Lua", "Warszawa Wschodnia") CommsOldJson("#Caller_You", "Ready_2_go_Lua", "Warszawa Wschodnia", "14103") CommsOldJson("WSD", "Thanku_semaph") coroutine.yield(CoroutineYields.WaitUntil, function() return VDLoaded end) CreateRoute("WSD_J4", "WSD_Akps", VDOrderType.TrainRoute) CreateRoute("WDC_W", "WDC_J", VDOrderType.TrainRoute) CreateRoute("WSD_L16", "WSD_J4", VDOrderType.TrainRoute) end) else CreateCoroutine(function() coroutine.yield(CoroutineYields.WaitForSeconds, 0.1) ShowUseRadioNotification() Comms(false, "StaticNoise") end) end end And you are done! I hope I have not overwhelmed you but all my extra stuff you do not strictly need, for what could be a very simple change. Example is attached 9where I put in the signal trigger thing and, as an example but commented out, the CreateRoute at the radio call code. If you have further questions, please do not hesitate to ask. 03_IC-WwaKatoSkipPhWSD.zip -
Remove a station stop from an existing screnario
jeroezie replied to ianparkinson62's topic in LUA Scripting
You probaly need to adjest the code, that sets the exit signal for the removed platform stops. Could you indicade, what scenario you are editing and what stops you want to taje out? Then I can give you an example on what to do. -
Personally I strongly prefer lines with mixed traffic. These tend to be interesting, because of the mixe. A racetrack with only high speed trains is not very interesting at all. As it happens, the Pendolino is the least interesting train to see passing, since they are all the same.* But I do understand the frustration of running late due to slower trains driving in the way. The SimRail network is running way more trains then the real Polish network. This can cause congestion if bad decisions are made by dispatch (or mistakes by drivers). Maybe the AI could be improved, in handling pt's or looking beyond the first other station? But why your focus to have the CMK as a pendolino racetrack? Having it that way seems a bit of a goal in itself, not only a preference of you, Mywasher. I noticed you keep talking about getting rid of the CMK cargo trains, but seem to not mention ic trains (120 & 140 km/h) holding up pendolino trains, which happens too. Its also very common for ic (both pendolino and normal and slow intercity) to be held up by stopping trains and cargo trains elsewhere. This may in face cause more problems than their are on the CMK, since cargo trains are faster then stopping trains and their are stations for overtaking, with enough distance in-between for planning overtaking. I hope they do remain, but I am aware that they come with plenty of problems. But I play mostly as a dispatcher. In fact, I got this game for the dispatching. I do not care about train sims itself, if its just about driving a train and that's it (driving trains in simrail is, only enough, an acquired taste). To come back on trains holding each other up, stopper trains are often delayed because they are sided to make way for ic trains. Cargo too. And cargo trains get delayed in favour of stopping trains, sometimes even if its an fast cargo train with a higher vmax than the stopper has. All of this can be rather frustrating, but regional and cargo drivers are rarely advocating to get rid of the other trains. Why are CMK Pendolino's so important for you? The CMK is not build as a dedicated high speed only line (when compared to, for example, the high speed line from Amsterdam to Paris). For me, the interaction between trains and different players makes the game interesting. Just seeing green SBL signals is not entertaining for me, even if I am on time. Maybe the schedules could be planned more forgiving, so you can drive delays out and get back on time? Although I have read, that is not very realistic for Poland. And then the fuss with early Pendolino's could return, which where known of complaining about not getting green vmax signals all the way, even if they where very early. Also, Mywasher, you keep talking off the CMK alone. But a lot of delays are encountered outside the CMK. Those wont improve with less cargo trains on the CMK. On the other hand, if the dev team forces cargo trains outside the CMK, they would need to increase cargo traffic outside the CMK to keep the train count balanced. This would create more conflicts outside the CMK. And the schedule is not robust with delays at all. That would just spread everywhere. This already happens. *Well technically, we have nowadays four Pendolino variants running around, but so far I was able to see only the vehicle numbers are different. When it is as it should be, CMK dispatchers should not get to see that.
-
The biggest upside of having freights, its a fun challange for dispatchers. Not that most people are good with that challange. The AI is not capable of looking before the previous post, a train can only be detected afther departure (and this causes the eternal yellow signal frustration between Ko / KZ, LC/LB and La / Zw). I think it would be much better, to improce the dispatching than to remove cargo trains. Or maybe swap some 100 km/h trains for empty 120 km/h trains (altough significantly less realistic). Maybe I should check what the max soeeds are for a given load on thd CMK. It is possible to use different max speeds in the schedule (for example 120 km/h on CMK and 80 km/h on normal lines). Please note that passenger traibs also inteefeer with each other. Mainly ar the Psary/Starzyny connecting track and the single platform at OP.
-
When playing today at Koluski, server int 9, what is running the provisional timetable, I noticed the following: When Zakowice Polusniowe asks is the line is clear for a train, I usually respond with for train * line is clear, whiteout stating the track number. Usually this works find and the virtual dispatcher replies as expected. However, it does not operate the interlocking. Some time later, it sends the is path clear message again. If you do not explicitly write down the track number 2, this loop continues. Only when you note track 2, the virtual dispatcher ZP will operate the interlocking with WBL request. This happens only with track 2. With track 1, the virtual dispatcher does try to send WBL and send the train when you only give for train *, the path is clear, without stating track 1. I experienced this today with trains 11656, 514020, 512030 and 514022. Build 26/03/2026 - 02:21, main branch. SimRail_log_2026-04-05_15-55-17.txt
-
How is this a game ??? (ETCS training scenario level 1)
jeroezie replied to R R's topic in General Discussion [Singleplayer]
Are you trying to play the ertms tutorials? They are intended for players who already know how to drive the pendolino. But their is no pendolino tutorial. I reccomend to play a vehicle tutotial first. I find the Kibel EN57 is a good pick for a casual drive when learning the game. -
Feeling Dizzy - Steam Achievement not tracking
jeroezie replied to Inkar's topic in Bug reporting [Singleplayer]
Not every bug can be high priorety... -
Real weather
jeroezie replied to BravoFoxMike's topic in Suggestions for improvements [Singleplayer]
The multiplayer servers already follow real time Polish weather. -
Feeling Dizzy - Steam Achievement not tracking
jeroezie replied to Inkar's topic in Bug reporting [Singleplayer]
You can check progress using dev menu, deafault keybinf is F8, look under the achievement tab. -
A check rail belonging to switch "WSD_24" in Warszawa Wschodnia is sticking into another piece of rails. Its located near platform 5, track 5, heading towards Warszawa Stadion, or from platform 5, track 24, heading to Centralna, at these coordinates: S: opoczno_warszawa_grochow_terrain_x249_z439, P: (127829.00, 91.14, 225114.80), R: (5.06, 248.76, 0.00). Bug noticed in the next branch, build 10/03/2026 03:26. https://s3.eu-central-1.amazonaws.com/forum.simrail.eu/monthly_2026_03/image.png.3871815b076f51c560db2ea0e297ca85.png Their is also a missing heart pieces bug a this location, see here: https://forum.simrail.eu/topic/12525-missing-heart-pieces-at-a-crossover-in-warszawa-wschodnia-coming-from-platform-5-track-5-towards-warszawa-stadion/
-
The heart pieces for a Dimond crossover in Warszawa Wschodnia are missing. Its located near platform 5, track 5, heading towards Warszawa Stadion, or from platform 5, track 24, heading to Centralna, at these coordinates: S: opoczno_warszawa_grochow_terrain_x249_z439, P: (127829.00, 91.14, 225114.80), R: (5.06, 248.76, 0.00). Bug noticed in the next branch, build 10/03/2026 03:26. Their is also a check rail bug a this location, see here: https://forum.simrail.eu/topic/12526-check-rail-sticking-into-other-rails-in-warszawa-wschodnia-coming-from-platform-5-track-5-towards-warszawa-stadion
-
Mooorits did write on the Discord, that multiple Impulses in onw train does not work yet, and they are still working on making this possible. Its unfortunate, but waiting for a good implemtation of Impuls coupling is probaly for the best. At least that will save our sanety in the meantime.
-
When driving at high speeds and with a full brake application, the EU07 loco should get a brake cylinder pressure of around 6 bars bar max, but it is limited at 4,1 bar, maybe the loco thinks it has a P brake setting instead of R? In the picture, I started braking while driving at 120 km/h and put the brake lever directly in brake position 7, to make sure I really did the the full brake application out of the triple valve. The brake system has been given plenty of time to fill since the scenario start and I did not use the brake releaser since scenario start. The bug is noticed in the next branch, build 10/03/2026 - 03:29, scenario [Cargo] Dabrowa - Pabianice - Chojny, chosen locomotives 2x EU07. SimRail_log_2026-03-14_23-41-59.txt
-
Some road pillars (what is the right word?) near the station building of Skierniewice went fully pink. This looks very weird from the dispatchers office, especially at night. Location: S: rogow_grodzisk_terrain_x130_z375, P: (67048.12, 126.89, 192131.10), R: (1.71, 342.19, 0.00). The bug is noticed in the next branch, build 10/03/2026 - 03:29.
-
The panel with the empty / loaded changeover lever have different markings on all the tanker wagons Zaes and Zas, types 406Ra and 406Rb. On the 'left' side of the wagon, the empty weight marking of 24 tons is on the right and the loaded marking of 58 tons on the right, which is wrong. The empty value should be on the leftmost position and the fully loaded position on the rightmost side. Please note that the marking on the 'right' side of the wagons are correct (for reference, the handbrake is located on the rear of the wagons). The 'PROZ' and 'LAD' text are swapped/mirrored too. Maybe its a good moment to check if the 'changeover' weight (in the middle below the actual lever) is actually correct, usually the changeover weight is in-between the empty and loaded braked weight, and thus not equal on the loaded braked weight, but it could be true for this wagon type, I am not familiar with this specific kind of wagon. Bug reported in the next branch, build 10/03/2026 - 03:29, but I have noticed it before on the main branch.
-
As far as I am aware, coupling Impulses yourself does not work yet.
-
Player names sometimes not visible
jeroezie replied to hoppturee-'s topic in Bug reporting [Multiplayer]
I reccomend tp turn it off and on again in the settings menu, then it will work again. -
You are still very vague about what you mean with "every situation like that". I do know know what you are referring too. The schedule, its just I do know know how to properly change from an passenger train to a PWJ empty run, if it is even possible.