I did up a cage of sorts, using the spawned invisible placeable method, with effects on them, and there doesn't seem to be any inconsistencies in how they work with that method.
I don't think the placeables are the issue, anyways. It seems like spawning them, even if applying an effect immediately, works fine.
Here's the script if anyone wants to see that test. I triggered it off an on activated property . Likely I could make it a bit more efficient still if I tried, there's a bit of possibly unneeded redundant code.
// (3/16/2012) Failed Bard
// Test Glowing Lights Cage.
float fDuration = 60.0;
float fDistance = 5.0;
location FB_GetFrontLocation (location lTarget, float fDistance, float fFacing = 0.0);
void main()
{
location lTarget = GetItemActivatedTargetLocation();
object oArea = GetAreaFromLocation (lTarget);
float fFacing = GetFacingFromLocation (lTarget);
location lPeak, lTop, lBottom;
object oPeak, oFirstTop, oTop, oLastTop, oFirstBottom, oBottom, oLastBottom;
vector vPos;
int i;
vPos = GetPositionFromLocation (lTarget);
vPos.z += 5.0;
lPeak = Location (oArea, vPos, fFacing);
DestroyObject (oPeak = CreateObject (OBJECT_TYPE_PLACEABLE, "neon_lights", lPeak, FALSE), fDuration + 1.0);
lBottom = FB_GetFrontLocation (lTarget, fDistance, fFacing);
DestroyObject (oBottom = CreateObject (OBJECT_TYPE_PLACEABLE, "neon_lights", lBottom, FALSE), fDuration + 1.0);
oFirstBottom = oBottom; oLastBottom = oBottom;
vPos = GetPositionFromLocation (lBottom);
vPos.z += 3.0;
lTop = Location (oArea, vPos, fFacing);
DestroyObject (oTop = CreateObject (OBJECT_TYPE_PLACEABLE, "neon_lights", lTop, FALSE), fDuration + 1.0);
oFirstTop = oTop; oLastTop = oTop;
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, EffectBeam (VFX_BEAM_SILENT_LIGHTNING, oPeak, BODY_NODE_CHEST), oTop, fDuration);
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, EffectBeam (VFX_BEAM_SILENT_LIGHTNING, oTop, BODY_NODE_CHEST), oBottom, fDuration);
while (i++ < 11)
{
fFacing += 30.0;
lBottom = FB_GetFrontLocation (lTarget, fDistance, fFacing);
DestroyObject (oBottom = CreateObject (OBJECT_TYPE_PLACEABLE, "neon_lights", lBottom, FALSE), fDuration + 1.0);
vPos = GetPositionFromLocation (lBottom);
vPos.z += 3.0;
lTop = Location (oArea, vPos, fFacing);
DestroyObject (oTop = CreateObject (OBJECT_TYPE_PLACEABLE, "neon_lights", lTop, FALSE), fDuration + 1.0);
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, EffectBeam (VFX_BEAM_SILENT_LIGHTNING, oPeak, BODY_NODE_CHEST), oTop, fDuration);
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, EffectBeam (VFX_BEAM_SILENT_LIGHTNING, oTop, BODY_NODE_CHEST), oBottom, fDuration);
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, EffectBeam (VFX_BEAM_SILENT_LIGHTNING, oLastTop, BODY_NODE_CHEST), oTop, fDuration);
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, EffectBeam (VFX_BEAM_SILENT_LIGHTNING, oLastBottom, BODY_NODE_CHEST), oBottom, fDuration);
oLastBottom = oBottom;
oLastTop = oTop;
}
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, EffectBeam (VFX_BEAM_SILENT_LIGHTNING, oTop, BODY_NODE_CHEST), oFirstTop, fDuration);
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, EffectBeam (VFX_BEAM_SILENT_LIGHTNING, oBottom, BODY_NODE_CHEST), oFirstBottom, fDuration);
}
location FB_GetFrontLocation (location lTarget, float fDistance, float fFacing = 0.0)
{
float ModX = cos (fFacing) * fDistance;
float ModY = sin (fFacing) * fDistance;
vector vPos = GetPositionFromLocation (lTarget);
vPos.x += ModX;
vPos.y += ModY;
lTarget = Location (GetAreaFromLocation (lTarget), vPos, fFacing);
return lTarget;
}