diff --git a/[gamemodes]/[race]/race/edf/race.edf b/[gamemodes]/[race]/race/edf/race.edf index 6ff0005a9..765530ba9 100644 --- a/[gamemodes]/[race]/race/edf/race.edf +++ b/[gamemodes]/[race]/race/edf/race.edf @@ -9,6 +9,7 @@ + diff --git a/[gamemodes]/[race]/race/meta.xml b/[gamemodes]/[race]/race/meta.xml index 4cae792b3..5b7b4e577 100644 --- a/[gamemodes]/[race]/race/meta.xml +++ b/[gamemodes]/[race]/race/meta.xml @@ -331,6 +331,13 @@ desc="FPS limit to use when vehicle physics mode is set to legacy. This setting changes the limit: -1 = leave unchanged, 0 = unlimited, 25+ = specific limit." /> + + @@ -344,6 +351,7 @@ + diff --git a/[gamemodes]/[race]/race/override_client.lua b/[gamemodes]/[race]/race/override_client.lua index a5311e14f..e4b0bc762 100644 --- a/[gamemodes]/[race]/race/override_client.lua +++ b/[gamemodes]/[race]/race/override_client.lua @@ -67,7 +67,11 @@ function OverrideClient.updateVars( element ) end function isCollideOthers ( element ) - return ( getElementData ( element, 'race.collideothers' ) or 0 ) ~= 0 + local collideothers = getElementData ( element, "race.collideothers" ) + if not collideothers and getElementType( element ) == "vehicle" then + collideothers = g_MapOptions and g_MapOptions.non_race_vehicle_collisions and not g_MapOptions.ghostmode + end + return ( collideothers or 0 ) ~= 0 end function isCollideWorld ( element ) @@ -120,7 +124,7 @@ if OverrideClient.debug then end local player = getVehicleController(vehicle) local collisions = not isVehicleCollisionsEnabled and "n/a" or isVehicleCollisionsEnabled(vehicle) - local collideothers = getElementData ( vehicle, "race.collideothers" ) + local collideothers = isCollideOthers ( vehicle ) local collideworld = getElementData ( vehicle, "race.collideworld" ) dxDrawText ( getElementDesc(vehicle), sx[1], sy ) dxDrawText ( tostring(collisions), sx[2], sy ) diff --git a/[gamemodes]/[race]/race/race_client.lua b/[gamemodes]/[race]/race/race_client.lua index af4ec3f1b..cd758ecbb 100644 --- a/[gamemodes]/[race]/race/race_client.lua +++ b/[gamemodes]/[race]/race/race_client.lua @@ -291,6 +291,12 @@ function updateOptions ( gameoptions, mapoptions ) -- Apply updateVehicleWeapons() + + -- Update vehicle collision settings + for _, vehicle in ipairs(getElementsByType("vehicle")) do + OverrideClient.updateVars(vehicle) + end + setCloudsEnabled(g_GameOptions.cloudsenable) setBlurLevel(g_GameOptions.blurlevel) g_dxGUI.mapdisplay:visible(g_GameOptions.showmapname) diff --git a/[gamemodes]/[race]/race/race_server.lua b/[gamemodes]/[race]/race/race_server.lua index 875c08695..8cb62990d 100644 --- a/[gamemodes]/[race]/race/race_server.lua +++ b/[gamemodes]/[race]/race/race_server.lua @@ -128,6 +128,8 @@ function cacheGameOptions() g_GameOptions.vehicle_physics_fps = getNumber('race.vehicle_physics_fps',-1) g_GameOptions.vehicle_physics_mode_map_can_override = getBool('race.vehicle_physics_mode_map_can_override',true) g_GameOptions.vehicle_physics_fps_map_can_override = getBool('race.vehicle_physics_fps_map_can_override',true) + g_GameOptions.non_race_vehicle_collisions = getBool("race.non_race_vehicle_collisions",false) + g_GameOptions.non_race_vehicle_collisions_map_can_override = getBool("race.non_race_vehicle_collisions_map_can_override",true) if g_GameOptions.statskey ~= 'name' and g_GameOptions.statskey ~= 'serial' then outputWarning( "statskey is not set to 'name' or 'serial'" ) g_GameOptions.statskey = 'name' @@ -158,6 +160,7 @@ function cacheMapOptions(map) g_MapOptions.hunterminigun = map.hunterminigun == 'true' g_MapOptions.vehicle_physics_mode = map.vehicle_physics_mode or g_GameOptions.vehicle_physics_mode g_MapOptions.vehicle_physics_fps = tonumber(map.vehicle_physics_fps) or g_GameOptions.vehicle_physics_fps + g_MapOptions.non_race_vehicle_collisions = map.non_race_vehicle_collisions == 'true' outputDebug("MISC", "duration = "..g_MapOptions.duration.." respawn = "..g_MapOptions.respawn.." respawntime = "..tostring(g_MapOptions.respawntime).." time = "..g_MapOptions.time.." weather = "..g_MapOptions.weather) @@ -225,6 +228,11 @@ function cacheMapOptions(map) g_MapOptions.vehicle_physics_fps = g_GameOptions.vehicle_physics_fps end + -- Set non_race_vehicle_collisions from g_GameOptions if not defined in the map, or map override not allowed + if not map.non_race_vehicle_collisions or not g_GameOptions.non_race_vehicle_collisions_map_can_override then + g_MapOptions.non_race_vehicle_collisions = g_GameOptions.non_race_vehicle_collisions + end + if g_MapOptions.vehicle_physics_mode == "fixed" then if g_OriginalVehiclePhysicsGlitchState == nil then g_OriginalVehiclePhysicsGlitchState = isGlitchEnabled("vehicle_rapid_stop") @@ -290,6 +298,7 @@ function loadMap(res) g_SavedMapSettings.hunterminigun = map.hunterminigun g_SavedMapSettings.vehicle_physics_mode = map.vehicle_physics_mode g_SavedMapSettings.vehicle_physics_fps = map.vehicle_physics_fps + g_SavedMapSettings.non_race_vehicle_collisions = map.non_race_vehicle_collisions cacheMapOptions(g_SavedMapSettings) diff --git a/[gamemodes]/[race]/race/racemap.lua b/[gamemodes]/[race]/race/racemap.lua index 6cfaef926..7ba3cfd91 100644 --- a/[gamemodes]/[race]/race/racemap.lua +++ b/[gamemodes]/[race]/race/racemap.lua @@ -7,7 +7,7 @@ g_MapObjAttrs = { g_MapSettingNames = table.create( {'time', 'weather', 'respawn', 'respawntime', 'duration', 'skins', 'bikehats', 'bikehatchance', 'carhats', 'carhatchance', 'hairstyles', 'glasses', 'glasseschance', 'shirts', 'trousers', 'shoes', - 'ghostmode', 'vehicleweapons', 'autopimp', 'firewater', 'classicchangez', 'hunterminigun', 'vehicle_physics_mode', 'vehicle_physics_fps'}, + 'ghostmode', 'vehicleweapons', 'autopimp', 'firewater', 'classicchangez', 'hunterminigun', 'vehicle_physics_mode', 'vehicle_physics_fps', 'non_race_vehicle_collisions'}, true )