Jump to content

Recommended Posts

Posted

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/

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...