v81 Posted June 21, 2022 Share Posted June 21, 2022 This has been a issue for years, but I've never seen it reported. Happens predominantly on busier servers, If someone has returned from a sortie, taxied to the ramp and is shutting down / rearming / whatever and another player selects a slot that the first player is physically occupying the aircraft are destroyed. This presents an additional issue of there now being debris in that location rendering it useless until the debris de-spawns or the server resets. Spawning in the debris causes the same issue. Suggestions on how to deal with it range from trivial to significant work. Easy way, have the server check that the location is suitable to spawn in before inserting the joining player. Could do this by sampling weather or not another aircraft is present within xyz co-ordinates of the spawn center. Then delay spawning for new player with a client message saying the current location is occupied. Crude but effective enough to stop telefraging. Most complicated - have a system of aircraft inventory and some logic in the game itself to determine where 'client' aircraft spawn. Something should be done... can happen not at all or a few times in a session. Either way it's unpleasant and DCS should be better than to fall victim to such a simple issue. Can this get a look at please? 2 R7 3800X - 32Gig RAM -- All SSD -- GTX1070 -- TM Warthog, MFG Crosswinds & TiR Link to comment Share on other sites More sharing options...
toutenglisse Posted June 22, 2022 Share Posted June 22, 2022 @v81, I think it may be possible to check objects at spawn spot inside a function, called when a player select a slot, and refuse or valid the spawn. I have no MP scripting exp., nor any way to test, so this has 99% chances to be an error, but a script example I can think off : Spoiler function DetectObjectsAtSpawn(point) foundUnits = {} local volS = { id = world.VolumeType.SPHERE, params = { point = point, radius = 1 } } local ifFound = function(foundItem, val) foundUnits[#foundUnits + 1] = foundItem:getName() return true end world.searchObjects({Object.Category.UNIT, Object.Category.STATIC, Object.Category.Cargo}, volS, ifFound) end local SpawnObjectFree = {} function SpawnObjectFree.onPlayerTryChangeSlot(playerId, side, slotId) local slotId = tostring(slotId)--convert multicrew slotId to unitId format ? if string.match(slotId, "_") then if string.len(slotId) == 3 then slotId = string.sub(slotId,1) elseif string.len(slotId) == 4 then slotId = string.sub(slotId,2) elseif string.len(slotId) == 5 then slotId = string.sub(slotId,3) end end local slotId = tonumber(slotId)--end of slotId conversion for i = 1, 2 do--red and blue for j = 0, 1 do--planes and helos local allGroups = coalition.getGroups(i, j) if #allGroups > 0 then for k = 1, #allGroups do local gpUnits = allGroups[k]:getUnits() if #gpUnits > 0 then for l = 1, #gpUnits do if gpUnits[l]:getID() == slotId then DetectObjectsAtSpawn(gpUnits[l]:getPoint()) if #foundUnits == 0 then return true else return false end end end end end end end end end Link to comment Share on other sites More sharing options...
v81 Posted June 25, 2022 Author Share Posted June 25, 2022 @toutenglisseAppreciate your input. I was thinking more like ED could implement it in the game code itself. My level of programing is 0.1 out of 10... i can sometimes take a working script or program and tweak or adjust it to do something slightly different... but that's about it. R7 3800X - 32Gig RAM -- All SSD -- GTX1070 -- TM Warthog, MFG Crosswinds & TiR Link to comment Share on other sites More sharing options...
Recommended Posts