Here is some code that should work:
#include "BuildingGameObj.h"
SLNode<BuildingGameObj> *x = GameObjManager::BuildingGameObjList.Head();
while (x)
{
BuildingGameObj *o = (GameObject *)x->Data();
if (o && (Get_Object_Type(o) == 0 || Get_Object_Type(o) == 1))
{
StringClass str;
str.Format("%d",Get_Object_Type(o));
Vector3 Size = Vector3(40.0f,40.0f,80.0f); //Size of the script zone.
Matrix3 Rotation(true);
Rotation.Rotate_Z(DEG_TO_RADF(Commands->Get_Facing(o))); //Set the rotation of the script zone to the same as the building.
Vector3 Pos = Commands->Get_Position(o);
Pos.Z -= 20;
OBBoxClass Box(Pos,Size,Rotation); //Create the bounding box with the position of the beacon, and the size and rotation defined earlier.
GameObject* Zone = Create_Zone("Script_Zone_All",Box);
Attach_Script_Once(Zone,"KB_Base_Zone",Team);
}
x = x->Next();
}
The key here is Get_Object_Type to identify the type of the object.