Note that I didn't use some of the techniques discussed here such as the _G[]() idea because the goal was to be quick and simple, but using this and the learnings in previous blog posts you should be able to use this in an effective way.
-- 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 MT_ALERT = 1 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 function DisplayRecordedMessage( messageName ) SysCall("RegisterRecordedMessage", "StartDisplay" .. messageName,
"StopDisplay" .. messageName, 1); end function StartDisplayIntroText() SysCall ( "ScenarioManager:ShowInfoMessageExt", "Title of the box",
"intromessage.html", 0, MSG_VCENTRE + MSG_CENTRE, MSG_REG, TRUE ); end function StopDisplayIntroText() end function StartDisplayMoving() SysCall ( "ScenarioManager:ShowInfoMessageExt", "You're off!",
"moving.html", 0, MSG_VCENTRE + MSG_CENTRE, MSG_REG, TRUE ); end function StopDisplayMoving() end function StartDisplayOverspeed1() SysCall ( "ScenarioManager:ShowInfoMessageExt", "Too fast!",
"overspeed1.html", 0, MSG_VCENTRE + MSG_CENTRE, MSG_REG, TRUE ); end function StopDisplayOverspeed1() end function StartDisplayOverspeed2() SysCall ( "ScenarioManager:ShowInfoMessageExt", "Final warning!",
"overspeed2.html", 0, MSG_VCENTRE + MSG_CENTRE, MSG_REG, TRUE ); end function StopDisplayOverspeed2() end function OnEvent(event) if (event == "introtext") then DisplayRecordedMessage("IntroText"); end if (event == "cinematic") then SysCall ( "CameraManager:ActivateCamera", "introcinematic", 0 ); end if (event == "cabcamera") then SysCall ( "CameraManager:ActivateCamera", "CabCamera", 0 ); end if (event == "startmovingcheck") then SysCall ( "ScenarioManager:BeginConditionCheck", "StartMovingCondition" ) end if (event == "startoverspeedcheck") then SysCall ( "ScenarioManager:BeginConditionCheck", "OverspeedCondition" ) end if (event == "starttoofastcheck2") then SysCall ( "ScenarioManager:BeginConditionCheck", "OverspeedCondition2" ) end if (event == "starttoofastcheck3") then SysCall ( "ScenarioManager:BeginConditionCheck", "StopCondition" ) SysCall ( "ScenarioManager:BeginConditionCheck", "OverspeedCondition3" ) end end function TestCondition(condition) if (condition == "StartMovingCondition") then speed = SysCall ( "PlayerEngine:GetSpeed" ); if (speed > 0.89) then DisplayRecordedMessage("Moving"); return CONDITION_SUCCEEDED; end return CONDITION_NOT_YET_MET; end if (condition == "OverspeedCondition") then speed = SysCall("PlayerEngine:GetSpeed"); if (speed > 8.904) then DisplayRecordedMessage("Overspeed1"); SysCall ( "ScenarioManager:TriggerDeferredEvent", "starttoofastcheck2", 5 ); return CONDITION_SUCCEEDED; end return CONDITION_NOT_YET_MET; end if (condition == "OverspeedCondition2") then speed = SysCall("PlayerEngine:GetSpeed"); if (speed > 8.904) then DisplayRecordedMessage("Overspeed2"); SysCall ( "PlayerEngine:SetControlValue", "Regulator", 0, 0); SysCall ( "PlayerEngine:SetControlValue", "TrainBrakeController", 0, 1); SysCall ( "PlayerEngine:SetControlValue", "VirtualThrottle", 0, 0); SysCall ( "PlayerEngine:SetControlValue", "VirtualBrake", 0, 1); SysCall ( "ScenarioManager:LockControls"); SysCall ( "ScenarioManager:TriggerDeferredEvent", "starttoofastcheck3", 5 ); return CONDITION_SUCCEEDED; end return CONDITION_NOT_YET_MET; end if (condition == "StopCondition") then speed = SysCall("PlayerEngine:GetSpeed"); if (speed < 0.1) then SysCall("ScenarioManager:UnlockControls"); return CONDITION_SUCCEEDED; end return CONDITION_NOT_YET_MET; end if (condition == "OverspeedCondition3") then speed = SysCall("PlayerEngine:GetSpeed"); if (speed > 8.904) then SysCall ( "ScenarioManager:TriggerScenarioFailure",
"I give up, you're out of here! Too much fast driving! - DarknezzMonster" ); return CONDITION_SUCCEEDED; end return CONDITION_NOT_YET_MET; end end
Hi Matt,
ReplyDeletefirst of all let me thank you for your wonderful work.
I'm a total beginer in scripting or building scenarios for Train Sim.
My question maybe sounds stupid to you but it's really basic to me.
How can i set a marker on my track to fire the event that is necessary to play the sound?
It must be simple but i can't find the right clicks in the scenario Manager to do this.
This is what i did so far:
1) i cloned a standard szenario
2) I changed the name and also start-text in the scenario Manager.
Now i want to set a marker maybe 1000 Meters behind the first station to play a sound like "tada good morning ... "
Can you give me a short description how to do that? I think that i can manage the rest of the task by my own...
Thank you so much!