Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Hier vind je alle onderwerpen over scripting voor Train Simulator zoals LUA.
Plaats reactie
Gebruikersavatar
RemkoH
Beheerder
Berichten: 569
Lid geworden op: 04 apr 2020, 12:00
3
Gegeven waarderingen: 169 keren
Ontvangen waarderingen: 360 keren

Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door RemkoH »

Destinationsigns on ChrisTrains (AI) trains with LUA-scripting (part 2)

Afbeelding Afbeelding
Koersborden op de nieuwste ChrisTrains treinen zijn in de scenario editor met de train ID in te stellen zoals te lezen is in de handleiding van de treinen.
Maar met lua scripting is het ook mogelijk om bestemmingen gedurende het scenario aan te passen.
Destinationsigns on the latest ChrisTrains trains can be set in the scenario editor by altering the train ID as mentioned in the manual of the trains.
But with LUA scripting it's also possible to change them during the scenario.


Voor meer informatie over hoe en wat met LUA scripting verwijs ik je graag naar elders.
Matt Paddlesden heeft een uitstekend filmpje op YouTube en daaruit gemaakte blogs voor degene die zich willen verdiepen in de beginselen van LUA scripting in scenario's.
For more information about the basics of LUA scripting I'd like to point you to somewhere else.
Matt Paddlesden has an excelent video on YouTube and created blogs from that for everyone who want to learn the basics of LUA scripting in scenarios.
Ik beperkt me hier alleen specifiek op de LUA scripting voor de koersborden. Here I'll confine myself only to LUA scripting for the destinationsigns.


Ten tijde van dit schrijven is deze tutorial van toepassing op: When writing this tutorial it applies to:
  • Stadler Flirt3
  • NS VIRMm
  • NS SNG
En het zal zeer waarschijnlijk ook van toepassing op toekomstige treinen. And it most likely will also apply to future trains.


Om in het scenario een andere bestemming op de koersborden te plaatsen kunnen events worden aangemaakt. Events need to be created to set different destinations on the destinationsigns in a scenario.
Het script gebruikt waardes uit twee wagons. De ID van de kopbak (train ID1) en van een tussenbak (train ID2). The script uses values of two carriages. The ID of the lead carriage (train ID1) and of one of the carriages (train ID2).
ID's van bestemmingen zijn te vinden in de handleiding van de trein. Destination ID's can be found in the train's manual.


Begin het LUA script met het declareren van enkele variabelen: Start the LUA script with the declaration of some variables:

Code: Selecteer alles

-- true/false defn
FALSE = 0
TRUE = 1

-- condition return values
CONDITION_NOT_YET_MET = 0
CONDITION_SUCCEEDED = 1
CONDITION_FAILED = 2
Plaats in ieder LUA script voor het eerste event dit: Place this in front of your first event in every LUA script:

Code: Selecteer alles

function OnEvent(event)
  _G["OnEvent" .. event]();
end
Maak vervolgens een event aan: Then create an event:

Code: Selecteer alles

function OnEvent[EventName]()
  newdestination = [destination ID];
  destination = SysCall ( "[train ID2]:GetControlValue", "DestinationBoards", 0 );
  if (destination < newdestination) then
    SysCall ( "[train ID1]:SetControlValue", "DestinationSelector", 0, 1 );
    SysCall ( "ScenarioManager:BeginConditionCheck", "[ConditionName]" );
  elseif (destination > newdestination) then
    SysCall ( "[train ID1]:SetControlValue", "DestinationSelector", 0, -1 );
    SysCall ( "ScenarioManager:BeginConditionCheck", "[ConditionName]" );
  end
end
Vervolgens wordt er een statuscontrole gestart. Next it starts a condition check.


Plaats in ieder LUA script voor de eerste condition dit: Place this in front of your first condition in every LUA script:

Code: Selecteer alles

function TestCondition(condition)
  _G["TestCondition" .. condition]();
end
Maak vervolgens een condition aan: Then create a condition:

Code: Selecteer alles

function TestCondition[ConditionName]()
  destination = SysCall ( "[train ID2]:GetControlValue", "DestinationBoards", 0 );
  if (destination == newdestination) then
    SysCall ( "ScenarioManager:TriggerDeferredEvent", "[EventName2]", 0 );
    return CONDITION_SUCCEEDED;
  end
  return CONDITION_NOT_YET_MET;
end
Maak een tweede event aan om de conditie te stoppen: Create a second event to stop the condition:

Code: Selecteer alles

function OnEvent[EventName2]()
  SysCall ( "ScenarioManager:EndConditionCheck", "[ConditionName]" );
  SysCall ( "[train ID1]:SetControlValue", "DestinationSelector", 0, 0 );
end
Het script leest de huidige bestemming uit en kijkt of de nieuwe bestemming een hogere of lagere ID is.
Vervolgens zul je zien dat op de koersborden oplopen of aflopen tot de gewenste bestemming wordt weergegeven.
The script reads the current destination and compares it to the new destination.
When the new ID is higher then destinations will scroll up until the desired destination is reached.
Is the new ID lower then it will scroll down.


Roep het event op in de scenario editor om de koersborden van de opgegeven trein te wijzigen naar de opgegeven bestemming. Call the event in the scenario editor to change the destinationsigns of the given train to it's destination.


Afbeelding

Voorbeelscript: Examplescript:

Code: Selecteer alles

-- true/false defn
FALSE = 0
TRUE = 1

-- condition return values
CONDITION_NOT_YET_MET = 0
CONDITION_SUCCEEDED = 1
CONDITION_FAILED = 2

-- Train ID's
TrainA_id1 = 079_12345 -- Flirt front carriage
TrainA_id2 = 67890     -- Flirt carriage
TrainB_id1 = 098_09876 -- SNG front carriage
TrainB_id2 = 54321     -- SNG carriage

-- Destination ID's
BLANCO = 0  -- Blanco

FLIRT_N_I = 1  -- Niet Instappen
FLIRT_WC  = 75 -- Wijchen
FLIRT_ZP  = 79 -- Zutphen

SNG_N_I = 1  -- Niet Instappen
SNG_UT  = 87 -- Utrecht Centraal
SNG_ZL  = 98 -- Zwolle

function OnEvent(event)
  _G["OnEvent" .. event]();
end

function OnEventDestinationFlirt()
  newdestination = FLIRT_WC;
  destination = SysCall ( TrainA_id2 .. ":GetControlValue", "DestinationBoards", 0 );
  if (destination < newdestination) then
    SysCall ( TrainA_id1 .. ":SetControlValue", "DestinationSelector", 0, 1 );
    SysCall ( "ScenarioManager:BeginConditionCheck", "DestinationFlirt" );
  elseif (destination > newdestination) then
    SysCall ( TrainA_id1 .. ":SetControlValue", "DestinationSelector", 0, -1 );
    SysCall ( "ScenarioManager:BeginConditionCheck", "DestinationFlirt" );
  end
end

function OnEventDestinationSng()
  newdestination = SNG_UT;
  destination = SysCall ( TrainB_id2 .. ":GetControlValue", "DestinationBoards", 0 );
  if (destination < newdestination) then
    SysCall ( TrainB_id1 .. ":SetControlValue", "DestinationSelector", 0, 1 );
    SysCall ( "ScenarioManager:BeginConditionCheck", "DestinationSng" );
  elseif (destination > newdestination) then
    SysCall ( TrainB_id1 .. ":SetControlValue", "DestinationSelector", 0, -1 );
    SysCall ( "ScenarioManager:BeginConditionCheck", "DestinationSng" );
  end
end

function OnEventDestinationFlirtStop()
  SysCall ( "ScenarioManager:EndConditionCheck", "DestinationFlirt" );
  SysCall ( TrainA_id1 .. ":SetControlValue", "DestinationSelector", 0, 0 );
end

function OnEventDestinationSngStop()
  SysCall ( "ScenarioManager:EndConditionCheck", "DestinationSng" );
  SysCall ( TrainB_id1 .. ":SetControlValue", "DestinationSelector", 0, 0 );
end

function TestCondition(condition)
  _G["TestCondition" .. condition]();
end

function TestConditionDestinationFlirt()
  destination = SysCall ( TrainA_id2 .. ":GetControlValue", "DestinationBoards", 0 );
  if (destination == newdestination) then
    SysCall ( "ScenarioManager:TriggerDeferredEvent", "DestinationFlirtStop", 0 );
    return CONDITION_SUCCEEDED;
  end
  return CONDITION_NOT_YET_MET;
end

function TestConditionDestinationSng()
  destination = SysCall ( TrainB_id2 .. ":GetControlValue", "DestinationBoards", 0 );
  if (destination == newdestination) then
    SysCall ( "ScenarioManager:TriggerDeferredEvent", "DestinationSngStop", 0 );
    return CONDITION_SUCCEEDED;
  end
  return CONDITION_NOT_YET_MET;
end
Wanneer het scenario start zijn de koersborden van de Flirt (TrainA) ingesteld op "Zutphen" en staat op de SNG (TrainB) "Zwolle". The destinationsigns of the Flirt (TrainA) are set to "Zutphen" and on the SNG (TrainB) they'll display "Zwolle" when the scenario starts.
Voor beide treinen is er een event die later in het scenario aangeroepen kan worden om een nieuwe bestemming in te stellen. There is a events for both trains that can be called later on in the scenario to set new destinations in the displays.
Roep in de editor event "DestinationFlirt" op om de koersborden van de Flirt in te stellen op "Wijchen".
Event "DestinationSng" stelt de SNG in op "Utrecht Centraal".
Call event "DestinationFlirt" in the editor to change the destinationsigns of the Flirt to "Wijchen".
Event "DestinationSng" will change the SNG into "Utrecht Centraal".


Afbeelding

Klik hier voor deel 1 van deze tutorial. Click here for part 1 of this tutorial.
Deze gebruikers waarderen RemkoH voor dit bericht:
Daniel
Co-founder van DutchSims, admin, moderator, tester, scenario bouwer, lua scripter
De lijst houdt niet op :upside_down:


mdfc33
Berichten: 9
Lid geworden op: 02 jan 2023, 02:21
1
Gegeven waarderingen: 2 keren
Ontvangen waarderingen: 4 keren

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door mdfc33 »

Beste Simmers, voor de liefhebbers van de nieuwe Christrains en/ of de updates van bestaande treinen die na de updates anders werken wat betreft de destination boards i.c.m. lua scripting, heb ik een methode gevonden om toch tijdens een scenario de bestemming op deze treinen te veranderen. Het probleem in het kort was dat er geen condition check mogelijk leek op de rollende koersborden zoals in de tutorial wel werkt op andere treinen. Met een paar kleine aanpassingen in het script is het wel mogelijk. Zie de code hieronder. Doe ermee wat je wil. En natuurlijk als iets verduidelijkt moet worden hoor ik dat graag. Getest op VIRMn en ICNG.

Code: Selecteer alles

------------------------------------------------
-- ScenarioScript.lua
------------------------------------------------
-- true/false defn
FALSE = 0
TRUE = 1

-- condition return values
CONDITION_NOT_YET_MET = 0
CONDITION_SUCCEEDED = 1
CONDITION_FAILED = 2

-- Train ID's recent destination
TrainA_id1 = "041_94012908571210715" -- VIRMm 9401 front carriage -- 041= Den Haag Centraal 

-- Train ID's new destination
TrainA_id2 = "093_94012908571210715" -- 093= Nijmegen

-- Events
function OnEvent(event)
  _G["OnEvent" .. event]()
end 

function OnEventDestinationVRM()  
destination = tonumber(string.sub(TrainA_id1,1,3)) -- The 2nd and 3rd character of the train ID -- in this case 41
newdestination = tonumber(string.sub(TrainA_id2,1,3))
  if (destination < newdestination) then
    SysCall ( TrainA_id1 .. ":SetControlValue", "DestinationSelector", 0, 1 )
    SysCall ( "ScenarioManager:BeginConditionCheck", "DestinationVRM" )
  elseif (destination > newdestination) then
    SysCall ( TrainA_id1 .. ":SetControlValue", "DestinationSelector", 0, -1 )
    SysCall ( "ScenarioManager:BeginConditionCheck", "DestinationVRM" )
  end
end

function OnEventDestinationVRMStop()
  SysCall ( TrainA_id1 .. ":SetControlValue", "DestinationSelector", 0, 0 )
  SysCall ( "ScenarioManager:EndConditionCheck", "DestinationVRM" )
end

function TestCondition(condition)
  _G["TestCondition" .. condition]();
end

function TestConditionDestinationVRM()
destination = SysCall ( TrainA_id1 .. ":GetRVNumber") -- the only value that is changing with the destination selector
	if (destination == TrainA_id2) then
		SysCall ( "ScenarioManager:TriggerDeferredEvent", "DestinationVRMStop", 0 )
	return CONDITION_SUCCEEDED;
	end
	return CONDITION_NOT_YET_MET
end
Deze gebruikers waarderen mdfc33 voor dit bericht (totaal 2):
TreintjeKerAp

Gebruikersavatar
KerAp
Berichten: 233
Lid geworden op: 12 mei 2020, 19:57
3
Gegeven waarderingen: 90 keren
Ontvangen waarderingen: 487 keren
Contacteer:

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door KerAp »

Werkt dit ook voor de oude versies van de geupdate treinen, zoals de VIRM en ICM? Dat krijg ik maar niet voor elkaar.

mdfc33
Berichten: 9
Lid geworden op: 02 jan 2023, 02:21
1
Gegeven waarderingen: 2 keren
Ontvangen waarderingen: 4 keren

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door mdfc33 »

Ik zal eens kijken wat er wel en niet werkt en hoe dan wel eventueel. Ik zit nu toch in die materie.

Gebruikersavatar
Truij
Berichten: 37
Lid geworden op: 25 mei 2022, 18:54
1
Locatie: Noord-West Nederland
Gegeven waarderingen: 10 keren
Ontvangen waarderingen: 7 keren

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door Truij »

KerAp schreef:
21 jan 2023, 17:03
Werkt dit ook voor de oude versies van de geupdate treinen, zoals de VIRM en ICM? Dat krijg ik maar niet voor elkaar.
Maar, waarom zou je dat willen? Want niemand die ze gebruikt en normaal gesproken heb je die niet eens...
Bouwen, Helpen, Bouwen, Rijden, Farming Simulator, 22
Net zoals ik het wil

Gebruikersavatar
Frison
Berichten: 2811
Lid geworden op: 04 apr 2020, 18:09
3
Gegeven waarderingen: 1273 keren
Ontvangen waarderingen: 8091 keren
Contacteer:

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door Frison »

Ik neem aan dat je dat gevraagd hebt aan alle lezers? :rolling_eyes:

Ik hou het er maar op dat je de vraag niet begrijpt :zipper_mouth:
Wat er niet is, dat kan je niet zien.
Maar wat je niet ziet kan er wel zijn.

Gebruikersavatar
Treintje
Berichten: 29
Lid geworden op: 17 feb 2022, 13:00
2
Locatie: hiero
Gegeven waarderingen: 18 keren
Ontvangen waarderingen: 6 keren

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door Treintje »

Ik zou een kleine correctie willen voorstellen.
In het aangepaste script staan o.a. 2 regels t.w.
-----
destination = tonumber(string.sub(TrainA_id1,2,3)) -- The 2nd and 3rd character of the train ID -- in this case 41
newdestination = tonumber(string.sub(TrainA_id2,2,3))
-----
Stel dat je nu een bestemming hebt naar Wijchen (126), dus 3 tekens, dan werkt het niet. Dit wordt 26
Ikzelf heb Dit even aangepast naar
----
destination = tonumber(string.sub(TrainA_id1,1,3)) -- vanaf het 1e karakter dus 3 karakters, in dit geval 126
newdestination = tonumber(string.sub(TrainA_id2,1,3)) -- en hier dus ook 3 karakters
Deze gebruikers waarderen Treintje voor dit bericht (totaal 2):
FrisonSjef61

Gebruikersavatar
KerAp
Berichten: 233
Lid geworden op: 12 mei 2020, 19:57
3
Gegeven waarderingen: 90 keren
Ontvangen waarderingen: 487 keren
Contacteer:

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door KerAp »

Truij schreef:
23 jan 2023, 12:55
Maar, waarom zou je dat willen? Want niemand die ze gebruikt en normaal gesproken heb je die niet eens...
Ik bedoelde "oude versies" in de context van zonder kleine m, dus ICM i.p.v. ICMm en VIRM i.p.v. VIRMm, niet in de context van oudere softwareversies. :wink:

Gebruikersavatar
Truij
Berichten: 37
Lid geworden op: 25 mei 2022, 18:54
1
Locatie: Noord-West Nederland
Gegeven waarderingen: 10 keren
Ontvangen waarderingen: 7 keren

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door Truij »

O, oeps...
De vraag verkeerd begrepen....
Bouwen, Helpen, Bouwen, Rijden, Farming Simulator, 22
Net zoals ik het wil

mdfc33
Berichten: 9
Lid geworden op: 02 jan 2023, 02:21
1
Gegeven waarderingen: 2 keren
Ontvangen waarderingen: 4 keren

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door mdfc33 »

Ja die 3 characters is helemaal goed. Nou snap ik ook ineens weer waarom die 3 :smile: . Voor de oude IRM heb ik ook een oplossing bedacht. Moet ik even netjes uitwerken, is nu vooral -- met wat code ertussen. Morgen weer een dag.

Gebruikersavatar
KerAp
Berichten: 233
Lid geworden op: 12 mei 2020, 19:57
3
Gegeven waarderingen: 90 keren
Ontvangen waarderingen: 487 keren
Contacteer:

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door KerAp »

Ben benieuwd!

mdfc33
Berichten: 9
Lid geworden op: 02 jan 2023, 02:21
1
Gegeven waarderingen: 2 keren
Ontvangen waarderingen: 4 keren

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door mdfc33 »

Zo nu eerst een ...

Even een korte uitleg. Ik kon bij de oude (V)IRM's geen geen waarde vinden die met de koersborden meebeweegt om op af te checken. Na veel gestuntel met waardes zetten in de DestinationBoards met een tellertje, enfin... ging nooit werken. Toen bedacht ik dat het misschien handiger was om het koersborden zetten met <ctrl+9> <ctrl+10> in de player modus na te bootsen in het script. Dat ging beter. Vraag me niet waarom sommige dingen in het script precies zo staan zoals ze staan want de wondere wereld van scripten in TSC is wat het is. Pak een IRM consist, zet 'm op het spoor, voeg een bestuurder toe, kopieer het script, kopieer het trein id van de eerste bak in het script, zet de events zoals in het script en zie of het ook voor jou werkt. Bij mij werkt het.

Gebruik het, pas het aan, verbeter het. Doe ermee wat je wil :smile: :beer:

Code: Selecteer alles

------------------------------------------------
-- ScenarioScript.lua
------------------------------------------------
-- true/false defn
FALSE = 0
TRUE = 1

-- condition return values
CONDITION_NOT_YET_MET = 0
CONDITION_SUCCEEDED = 1
CONDITION_FAILED = 2

-- Message types
MT_INFO = 0			-- large centre screen pop up
MT_ALERT = 1		-- top right alert message

MSG_TOP = 1
MSG_VCENTRE = 2
MSG_BOTTOM = 4
MSG_LEFT = 8
MSG_CENTRE = 16
MSG_RIGHT = 32

MSG_SMALL = 0
MSG_REG = 1
MSG_LRG = 2

--TrainID's
Trainid1 = "863385660665"

--DestinationID's
dboard = 0		-- Start value variable used
IRM_DFT = 002	-- Default value Christrains IRM (Extra Trein)_
IRM_DHC = 41	-- Den Haag Centraal
IRM_RDC = 103 	-- Rotterdam Centraal
IRM_NIS = 001	-- Niet Instappen
IRM_ADC = 022

-- Events
function OnEvent(event)
  _G["OnEvent" .. event]();
end

-- functions
function Checkdest(Destination, NDestination)	-- checks and fixes the destination list gap (004 - 011)
	if (Destination < 11) then
	destination = destination + 6
	elseif (NDestination < 11) then
	destination = destination - 5
	end
	return TRUE
end

function UseSelectorOnIRM(DestinationID, NewDestinationID, TrainID, EventName) -- main function with 4 attributes 
destination = DestinationID 
ndestination = NewDestinationID
Checkdest (destination, ndestination)
gtrainid = TrainID
difference = (destination - NewDestinationID)
eventname = EventName
newdestination = math.abs(difference)
	if (dboard ~= newdestination) then
		dboard = dboard + 1
		SelectorUpDown()
		SelectorStop()
		SysCall ("ScenarioManager:TriggerDeferredEvent", eventname, 0.3)  -- last value= speed of the selector, lower is more quick
	elseif (dboard == newdestination) then
		SelectorStop()
		dboard = 0
	end
end

function SelectorUpDown() -- decides wether selector goes up or down
	if (difference < 0) then 
		SysCall ("ScenarioManager:TriggerDeferredEvent", "SelectorUp")
		--return TRUE
	elseif (difference > 0) then
		SysCall ("ScenarioManager:TriggerDeferredEvent", "SelectorDown")
	end
end

function SelectorStop() -- stop the selector
SysCall ("ScenarioManager:TriggerDeferredEvent", "SelectorStop")
return TRUE
end

function OnEventSelectorUp() -- called deferred event selector up
	SysCall ( gtrainid .. ":SetControlValue", "DestinationSelector", 0, 1 )
	SysCall ("ScenarioManager:TriggerDeferredEvent", "SelectorStop")
return TRUE
end

function OnEventSelectorDown() -- called deferred event selector down
	SysCall ( gtrainid .. ":SetControlValue", "DestinationSelector", 0, -1 )
	SysCall ("ScenarioManager:TriggerDeferredEvent", "SelectorStop")	
return TRUE
end

function OnEventSelectorStop() -- called deferred event stop
SysCall ( gtrainid .. ":SetControlValue", "DestinationSelector", 0, 0 )
return TRUE
end 

-- User events

function OnEventIRM_DHC()  
UseSelectorOnIRM(IRM_DFT, IRM_DHC, Trainid1, "IRM_DHC")  -- attr 1st attr= current dest, 2nd= next dest, 3rd= TrainID, 4th= EventName 
return TRUE
end

function OnEventIRM_RDC()  
UseSelectorOnIRM(IRM_DHC, IRM_RDC, Trainid1, "IRM_RDC")
return TRUE
end

function OnEventIRM_NIS()  
UseSelectorOnIRM(IRM_RDC, IRM_NIS, Trainid1, "IRM_NIS")
return TRUE
end

function OnEventIRM_ADC()  
UseSelectorOnIRM(IRM_NIS, IRM_ADC, Trainid1, "IRM_ADC")
return TRUE
end
Afbeelding

mdfc33
Berichten: 9
Lid geworden op: 02 jan 2023, 02:21
1
Gegeven waarderingen: 2 keren
Ontvangen waarderingen: 4 keren

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door mdfc33 »

Treintje schreef:
23 jan 2023, 13:49
Ik zou een kleine correctie willen voorstellen.
In het aangepaste script staan o.a. 2 regels t.w.
-----
destination = tonumber(string.sub(TrainA_id1,2,3)) -- The 2nd and 3rd character of the train ID -- in this case 41
newdestination = tonumber(string.sub(TrainA_id2,2,3))
-----
Stel dat je nu een bestemming hebt naar Wijchen (126), dus 3 tekens, dan werkt het niet. Dit wordt 26
Ikzelf heb Dit even aangepast naar
----
destination = tonumber(string.sub(TrainA_id1,1,3)) -- vanaf het 1e karakter dus 3 karakters, in dit geval 126
newdestination = tonumber(string.sub(TrainA_id2,1,3)) -- en hier dus ook 3 karakters
Aangepast in het script.

Gebruikersavatar
KerAp
Berichten: 233
Lid geworden op: 12 mei 2020, 19:57
3
Gegeven waarderingen: 90 keren
Ontvangen waarderingen: 487 keren
Contacteer:

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door KerAp »

mdfc33 schreef:
25 jan 2023, 22:43
Pak een IRM consist, zet 'm op het spoor, voeg een bestuurder toe, kopieer het script, kopieer het trein id van de eerste bak in het script, zet de events zoals in het script en zie of het ook voor jou werkt. Bij mij werkt het.
En dit werkte ook voor AI?

mdfc33
Berichten: 9
Lid geworden op: 02 jan 2023, 02:21
1
Gegeven waarderingen: 2 keren
Ontvangen waarderingen: 4 keren

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door mdfc33 »

Het is voor AI treinen. Niet getest met player trein, maar zal ook wel werken. TrainID wordt gebruikt van de eerste mBvk bak.

Gebruikersavatar
KerAp
Berichten: 233
Lid geworden op: 12 mei 2020, 19:57
3
Gegeven waarderingen: 90 keren
Ontvangen waarderingen: 487 keren
Contacteer:

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door KerAp »

Vet! Ik heb destijds geprobeerd om de geometry direct via het scenario script in- en uit te schakelen, buiten de ingebouwde scripting om, omdat dat volgens Chris zelf de enige hoop was, en dat werkte totaal niet!

Dus zelfs Chris zelf kwam niet op deze oplossing. :wink: :thumbsup:

Edit: En waarom je de player modus F9 en F10 moest nabootsen kan ik na gesprekken met Chris erover makkelijk verklaren: Hij heeft het in lua zo ingesteld dat alleen in player modus de bestemming gewijzigd kan worden. Een script kan de bestemming niet (direct) wijziggen. Dit is ook waarom het oude script niet meer werkt.
Deze gebruikers waarderen KerAp voor dit bericht:
mdfc33

mdfc33
Berichten: 9
Lid geworden op: 02 jan 2023, 02:21
1
Gegeven waarderingen: 2 keren
Ontvangen waarderingen: 4 keren

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door mdfc33 »

Wat het script doet is eigenlijk de koersrol laten lopen en weer stoppen. Ik kwam erachter dat dan de koersrol 1 positie opschuift. Dus van Extra Trein naar Welkom bij NS. Duurde nog even totdat ik het in stapjes kon doen want hij bleef maar doorlopen of ging geen centimeter vooruit. Je zit ook met de timing. Real time vs frames etc. Maar de deferred events hebben een timer, johee, daarmee kwam ik een stukje verder. En ik dacht als ik 'm 1 keer kan laten lopen en stoppen dan moet dat ook meerdere keren kunnen. Dus als ik nou iedere keer het event weer aanroep en dat een paar keer totdat ie daar stopt waar ik 'm hebben wil... Makkelijker gezegd dan gedaan, maar uiteindelijk, meer trial and error dan wijsheid, had ik 'm. :astonished:

Ik vind namelijk dat als ik een scenario maak en ik een trein op een station zet dat die borden moeten kloppen. Punt. :joy: Daarom vind ik het ook helemaal niet erg om net zo lang met die scriptjes te klooien totdat het werkt of echt niet kan. :thinking:
Deze gebruikers waarderen mdfc33 voor dit bericht (totaal 2):
mkasthijsKerAp

Gebruikersavatar
KerAp
Berichten: 233
Lid geworden op: 12 mei 2020, 19:57
3
Gegeven waarderingen: 90 keren
Ontvangen waarderingen: 487 keren
Contacteer:

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door KerAp »

Knap, hoor. Ik ben er iig blij mee dat er weer een stuk realisme "terugveroverd" is.

Holandan11
Berichten: 1
Lid geworden op: 09 aug 2021, 15:02
2
Gegeven waarderingen: 0
Ontvangen waarderingen: 0

Re: Koersborden op ChrisTrains (AI) treinen met LUA-scripting (deel 2)

Bericht door Holandan11 »

Hallo allemaal
Ik heb vandaag proberen maken LUA script volgens deze tutorial. Alles was goed maar krijg ik raar melding :
ScenarioScript.lua:12'=' expected near 'Train_ID2'.
Weet er iemands waar heb ik fout gedaan ?
Hier voor kijken hoe staan dat tot die regel 12

-- true/false defn
FALSE = 0
TRUE = 1

-- condition return values
CONDITION_NOT_YET_MET = 0
CONDITION_SUCCEEDED = 1
CONDITION_FAILED = 2

-- Train ID's
Train_id1 = 120_12345 -- SNG front carriage
Train_id2 = 67890 -- SNG carriage

Dat was volgends die eerste ,ik ga nog proberen die tweede.
Heb ik ook die tweede geprobeerd
Maar hellas werk niet . Ik weet niet wat ik verkeerd doet .
Kan mieschien er iemand helpen of tip geven?
Dank je wel
JIrka

Plaats reactie

Terug naar “Scripting”