void main()
{
object oItem = OBJECT_SELF;
object oArea = GetArea(oItem);
string sDoorID = GetLocalString(oArea, "TempArea");
int iIndex = GetLocalInt(oItem, "index");
SetCampaignVector("hh_property", sDoorID + IntToString(iIndex) + "position", GetPosition(oItem));
SetCampaignFloat("hh_property", sDoorID + IntToString(iIndex) + "facing", GetFacing(oItem));
}
Correct me if I am wrong, but you are destroying the object, and creating a new one, in the new location - correct?
But it does not look like you are transfering the index variable from the old one, to the new one?
Without this variable, all placeables would have the same index number, and end up having their data overwriting eachother.
try changing your code to be
void main()
{
object oArea = GetArea(OBJECT_SELF);
string sResRef = GetResRef(OBJECT_SELF);
float fFacing = GetFacing(OBJECT_SELF);
vector vVector = GetPosition(OBJECT_SELF) + Vector(0.0, -1.0, 0.0);//south
location lSpawn = Location(oArea, vVector, 0.0);
[b]int iIndex = GetLocalInt(OBJECT_SELF,"index");
[/b]object oObject = CreateObject(OBJECT_TYPE_PLACEABLE, sResRef, lSpawn);
[b]SetLocalInt(oObject,"index",iIndex);
[/b]AssignCommand(oObject, SetFacing(fFacing));
DestroyObject(OBJECT_SELF, 1.0);
}