Hello ! I'm trying to make a scenario where the player's car changes automatically when driving through a certain checkpoint. However, as soon as the vehicle is changed driving through the next checkpoint doesn't trigger it. Any idea for a solution ?
This is because the waypoint tracking is done by the vehicle, so resetting it makes it lose that information. If you look at lua/ge/extensions/scenario/race.lua:141, you'll find the following bit of code (where bo is the player vehicle and nwp the next waypoint): Code: -- aim for the next waypoint bo:queueLuaCommand('scenario.setTrigger("race.onScenarioVehicleTrigger", ' .. serialize(nwp.pos) .. ',' .. nwp.radius .. ');') You'll have to call similar code after reloading the player vehicle.
Thanks ! But sadly I didn't managed to get it working, I have a lua error each time. Code I added to my lua : Code: -- Vehicle change at the 1st waypoint if data.waypointName == 'testwp1' then TorqueScript.eval([[ scenario_player0.JBeam = "sunburst"; scenario_player0.partConfig = "vehicles/sunburst/sport_S_M.pc"; scenario_player0.requestReload(); ]]) log('I', 'test.vehicleChanger', 'Sunburst spawned') --Getting the vehicle id local vid = scenario.vehiclesByID[id] local bo = be:getObjectByID(vid) if not bo then return end local nwp = "testwp2" local pos = "vec3(0,-50,0)" local radius = "4.3301272392273" bo:queueLuaCommand('scenario.setTrigger("race.onScenarioVehicleTrigger",' .. pos .. ',' .. radius .. ');') end Here is the part of the log where the error is written : Code: [...] 19.61711|I|GELua.test.vehicleChanger|Sunburst spawned 19.61739|E|GameEngineLua|*** FATAL LUA ERROR: levels/smallgrid/scenarios/testScenario.lua:16: attempt to index global 'scenario' (a nil value) Stack Traceback =============== (1) Lua local 'fct' at file 'levels/smallgrid/scenarios/testScenario.lua:16' Local variables: data = table: 0x5f8a1120 {waypointName:testwp1, time:3.3834845097736, vehicleName:scenario_player0 (more...)} goal = nil (*temporary) = nil (*temporary) = string: "I" (*temporary) = string: "test.vehicleChanger" (*temporary) = string: "Sunburst spawned" (*temporary) = number: 7.50616e-313 (*temporary) = number: 1.14048e+152 (*temporary) = userdata: 0x5f831c38 (*temporary) = string: "I" (*temporary) = string: "test.vehicleChanger" (*temporary) = string: "Sunburst spawned" (*temporary) = table: 0x5f806a78 {__gc:function: 0x5f8077b0, findObjectByIdAsTable:function: 0x5f808050, log:function: 0x5f807688 (more...)} (*temporary) = table: 0x5f806a78 {__gc:function: 0x5f8077b0, findObjectByIdAsTable:function: 0x5f808050, log:function: 0x5f807688 (more...)} (*temporary) = string: "attempt to index global 'scenario' (a nil value)" (2) Lua field 'hook' at file 'lua/common/extensions.lua:159' Local variables: func = string: "onRaceWaypoint" (for generator) = C function: next (for state) = table: 0x5fa22978 {1:function: 0x5fa23ae8, 2:function: 0x5f8bf778, 3:function: 0x5fa91670 (more...)} (for control) = number: nan _ = number: 4 fct = Lua function 'onRaceWaypoint' (defined at line 1 of chunk levels/smallgrid/scenarios/testScenario.lua) (3) Lua field 'onScenarioVehicleTrigger' at file 'lua/ge/extensions//scenario/race.lua:108' Local variables: id = number: 1878 w = table: 0x5f94f0f0 {nextWp:table: 0x5f92f5f0, lap:0, cur:1, next2:2, next2Wp:table: 0x5f8361f8 (more...)} vid = number: 1878 bo = userdata: 0x5f8a7090 lapDiff = number: 0 (4) main chunk of [string "line"] at line 1 19.61742|E|GameEngineLua|*** while executing this line: race.onScenarioVehicleTrigger(1878) 19.61743|E|GameEngineLua|*** in chunk: line 19.64238|D|libbeamng.engine|deleting object slot 0 ... 19.65858|I|BeamNGVehicle::spawnObject|Spawning object 'sunburst' with config: 'vehicles/sunburst/sport_S_M.pc' 19.69430|D|libbeamng.engine|creating new object in slot 0 ... 19.70393|D|libbeamng.lua.V.default.init|spawning vehicle vehicles/sunburst/ 19.75166|D|libbeamng.lua.V.default.init| using partconfig filename vehicles/sunburst/sport_S_M.pc - path:vehicles/sunburst/ 19.75255|D|libbeamng.lua.V.jbeam.loadDirectories|set vehicle directory to vehicles/sunburst/ [...] The log points the "race.onScenarioVehicleTrigger" as the source of the error, however I didn't managed to understand what this variable is ( I didn't found any "race" table mentioned elsewhere EDIT : apparently this is a function and not a table, but I still don't understand why it doesn't work). One last point that also seems weird to me : on the log I can see that the sunburst is changed after the error appearing, but the code that produce the error is after the vehicle change.
Hey, ok unfortunately it's not possible for now to change the vehicle without breaking the checkpoint stuff. Currently the vehicle itself is storing the data about the next checkpoint which you have to reach, so there's no superior player class which is sotring such data. So changing the vehicle results in the loss of the next checkpoint. So without changing default code it's possible for now. Forutnately in the meantime one of the devs modified the function so the checkpoint data will be cached in a variable and passed to the next car afterwards. In the prospective update you just have to change the vehicle via Lua and it the checkpoint stuff will work automatically.