Igneous01 Posted November 6, 2017 Posted November 6, 2017 There are some issues with destroying newly created cargo objects when using coalition.addStaticObject, as well as destroying existing objects in the game ie. local myObj = coalition.addStaticObject(cargo_table) myObj:destroy() myObj:isExist() -- true I think the problem here is that the Scripting Engine doesn't recognize the cargo as destroyed until after your script has run. IE. In my log I tried 2 test cases: First Case: 03713.586 INFO SCRIPTING: Creating StaticObject Instance 'TESTCARGO' 03713.587 ERROR DCS: The file with cargo parameters doesn't exist. Please, add it in (the folder with DCS)/Data and name it as the cargo 3d-model ammo_cargo 03713.587 INFO DCS: CargoManager::addCargo16805376 03713.587 INFO SCRIPTING: 5117( 13)/E: EVENT00000.onEvent({[1]="S_EVENT_BIRTH",[2]={["id"]=15,["IniObjectCategory"]=6,["time"]=0,["initiator"]={["id_"]=16805376,},},[5]=1,}) 03713.587 INFO SCRIPTING: 5127( 13)/E: EVENT00000.onEvent({[1]="Evaluating: ",[2]="DATABASE#000000003",}) 03713.587 INFO SCRIPTING: 5240( 13)/E: EVENT00000.onEvent({[1]="Calling EventFunction for Class ",[2]="DATABASE#000000003",[3]=1,}) 03713.587 INFO SCRIPTING: 5127( 13)/E: EVENT00000.onEvent({[1]="Evaluating: ",[2]="SPAWN#000000285",}) 03713.587 INFO SCRIPTING: 5240( 13)/E: EVENT00000.onEvent({[1]="Calling EventFunction for Class ",[2]="SPAWN#000000285",[3]=5,}) 03713.587 INFO SCRIPTING: 5127( 13)/E: EVENT00000.onEvent({[1]="Evaluating: ",[2]="SPAWN#000000284",}) 03713.587 INFO SCRIPTING: 5240( 13)/E: EVENT00000.onEvent({[1]="Calling EventFunction for Class ",[2]="SPAWN#000000284",[3]=5,}) 03713.587 INFO SCRIPTING: TESTCARGO - Is ALIVE? (StaticObject.getByName():isExist()) : true 03713.587 INFO SCRIPTING: TESTCARGO - Is ALIVE? (test_cargo_obj:isExist()) : true 03713.587 INFO SCRIPTING: Destroying Crate TESTCARGO (using obj:destroy()) 03713.587 INFO SCRIPTING: TESTCARGO - Is ALIVE? (test_cargo_obj:isExist()) : true 03713.588 INFO SCRIPTING: TESTCARGO - Is ALIVE? (StaticObject.getByName():isExist()) : true 03713.588 INFO SCRIPTING: Destroying Crate TESTCARGO (StaticObject.getByName():destroy() 03713.588 INFO SCRIPTING: TESTCARGO - Is ALIVE? (test_cargo_obj:isExist()) : true 03713.588 INFO SCRIPTING: TESTCARGO - Is ALIVE? (StaticObject.getByName():isExist()) : true 03713.588 INFO DCS: cargoCrashed:16805376 03713.588 INFO SCRIPTING: 5117( 13)/E: EVENT00000.onEvent({[1]="S_EVENT_DEAD",[2]={["id"]=8,["IniObjectCategory"]=6,["time"]=45883.901,["initiator"]={["id_"]=16805376,},},[5]=-1,}) 03713.588 INFO SCRIPTING: 5127( 13)/E: EVENT00000.onEvent({[1]="Evaluating: ",[2]="SPAWN#000000285",}) 03713.588 INFO SCRIPTING: 5240( 13)/E: EVENT00000.onEvent({[1]="Calling EventFunction for Class ",[2]="SPAWN#000000285",[3]=5,}) 03713.588 INFO SCRIPTING: 5127( 13)/E: EVENT00000.onEvent({[1]="Evaluating: ",[2]="SPAWN#000000284",}) 03713.588 INFO SCRIPTING: 5240( 13)/E: EVENT00000.onEvent({[1]="Calling EventFunction for Class ",[2]="SPAWN#000000284",[3]=5,}) 03713.588 INFO SCRIPTING: 5127( 13)/E: EVENT00000.onEvent({[1]="Evaluating: ",[2]="DATABASE#000000003",}) 03713.588 INFO SCRIPTING: 5240( 13)/E: EVENT00000.onEvent({[1]="Calling EventFunction for Class ",[2]="DATABASE#000000003",[3]=1,}) Second Case: 04061.584 INFO SCRIPTING: Creating StaticObject Instance 'TESTCARGO' 04061.585 INFO DCS: CargoManager::addCargo16805632 04061.585 INFO SCRIPTING: 5117( 13)/E: EVENT00000.onEvent({[1]="S_EVENT_BIRTH",[2]={["id"]=15,["IniObjectCategory"]=6,["time"]=0,["initiator"]={["id_"]=16805632,},},[5]=1,}) 04061.585 INFO SCRIPTING: 5127( 13)/E: EVENT00000.onEvent({[1]="Evaluating: ",[2]="DATABASE#000000003",}) 04061.585 INFO SCRIPTING: 5240( 13)/E: EVENT00000.onEvent({[1]="Calling EventFunction for Class ",[2]="DATABASE#000000003",[3]=1,}) 04061.585 INFO SCRIPTING: 5127( 13)/E: EVENT00000.onEvent({[1]="Evaluating: ",[2]="SPAWN#000000285",}) 04061.585 INFO SCRIPTING: 5240( 13)/E: EVENT00000.onEvent({[1]="Calling EventFunction for Class ",[2]="SPAWN#000000285",[3]=5,}) 04061.585 INFO SCRIPTING: 5127( 13)/E: EVENT00000.onEvent({[1]="Evaluating: ",[2]="SPAWN#000000284",}) 04061.585 INFO SCRIPTING: 5240( 13)/E: EVENT00000.onEvent({[1]="Calling EventFunction for Class ",[2]="SPAWN#000000284",[3]=5,}) 04061.586 INFO SCRIPTING: TESTCARGO - Is ALIVE? (StaticObject.getByName():isExist()) : true 04061.586 INFO SCRIPTING: TESTCARGO - Is ALIVE? (test_cargo_obj:isExist()) : true 04061.586 INFO SCRIPTING: Destroying Crate TESTCARGO (using obj:destroy()) 04061.586 INFO SCRIPTING: TESTCARGO - Is ALIVE? (test_cargo_obj:isExist()) : true 04061.586 INFO SCRIPTING: TESTCARGO - Is ALIVE? (StaticObject.getByName():isExist()) : true 04061.586 INFO DCS: cargoCrashed:16805632 04061.586 INFO SCRIPTING: 5117( 13)/E: EVENT00000.onEvent({[1]="S_EVENT_DEAD",[2]={["id"]=8,["IniObjectCategory"]=6,["time"]=46231.901,["initiator"]={["id_"]=16805632,},},[5]=-1,}) 04061.586 INFO SCRIPTING: 5127( 13)/E: EVENT00000.onEvent({[1]="Evaluating: ",[2]="SPAWN#000000285",}) 04061.586 INFO SCRIPTING: 5240( 13)/E: EVENT00000.onEvent({[1]="Calling EventFunction for Class ",[2]="SPAWN#000000285",[3]=5,}) 04061.586 INFO SCRIPTING: 5127( 13)/E: EVENT00000.onEvent({[1]="Evaluating: ",[2]="SPAWN#000000284",}) 04061.586 INFO SCRIPTING: 5240( 13)/E: EVENT00000.onEvent({[1]="Calling EventFunction for Class ",[2]="SPAWN#000000284",[3]=5,}) 04061.586 INFO SCRIPTING: 5127( 13)/E: EVENT00000.onEvent({[1]="Evaluating: ",[2]="DATABASE#000000003",}) 04061.586 INFO SCRIPTING: 5240( 13)/E: EVENT00000.onEvent({[1]="Calling EventFunction for Class ",[2]="DATABASE#000000003",[3]=1,}) You can see that the EVENT_DEATH isn't called for the cargo object until long after my script has finished executing, yet when I try to check :isExist it still thinks it's alive (because the mission hasn't destroyed it yet for some reason). Is this a known bug? It's been around since the last 3 patches (Being an issue since August 2017 for me). This is the test code I was using to confirm all of this: env.info("Creating StaticObject Instance 'TESTCARGO'") local function PositionAt12Oclock(_unit, _offset) local _position = _unit:getPosition() local _angle = math.atan2(_position.x.z, _position.x.x) local _xOffset = math.cos(_angle) * _offset local _yOffset = math.sin(_angle) * _offset local _point = _unit:getPoint() return { x = _point.x + _xOffset, z = _point.z + _yOffset, y = _point.y } end local pos = PositionAt12Oclock(Unit.getByName("SLCPilot1"), 30) local test_cargo_obj = coalition.addStaticObject(country.id.RUSSIA, { country = "Russia", category = "Cargos", x = pos.x, y = pos.z, type = "ammo_cargo", name = "TESTCARGO", mass = 1000, canCargo = true }) env.info("TESTCARGO - Is ALIVE? (StaticObject.getByName():isExist()) : " .. tostring(StaticObject.getByName("TESTCARGO"):isExist())) env.info("TESTCARGO - Is ALIVE? (test_cargo_obj:isExist()) : " .. tostring(test_cargo_obj:isExist())) env.info("Destroying Crate TESTCARGO (using obj:destroy())") test_cargo_obj:destroy() env.info("TESTCARGO - Is ALIVE? (test_cargo_obj:isExist()) : " .. tostring(test_cargo_obj:isExist())) env.info("TESTCARGO - Is ALIVE? (StaticObject.getByName():isExist()) : " .. tostring(StaticObject.getByName("TESTCARGO"):isExist())) --env.info("Destroying Crate TESTCARGO (StaticObject.getByName():destroy()") --StaticObject.getByName("TESTCARGO"):destroy() --env.info("TESTCARGO - Is ALIVE? (test_cargo_obj:isExist()) : " .. tostring(test_cargo_obj:isExist())) --env.info("TESTCARGO - Is ALIVE? (StaticObject.getByName():isExist()) : " .. tostring(StaticObject.getByName("TESTCARGO"):isExist())) Developer of Kaukasus Insurgency - a customizable Dynamic PvE Campaign with cloud hosting and stats tracking. (Alpha) http://kaukasusinsurgency.com/
Grimes Posted November 6, 2017 Posted November 6, 2017 Thats a known bug. The right man in the wrong place makes all the difference in the world. Current Projects: Grayflag Server, Scripting Wiki Useful Links: Mission Scripting Tools MIST-(GitHub) MIST-(Thread) SLMOD, Wiki wishlist, Mission Editing Wiki!, Mission Building Forum
Recommended Posts