//Функция создания зданий/обьектов BORIZZ.K
//Не поставит здание/обьект там где оно уже есть в радиусе 10м!!!
//параметры вызова
//НазваниеКласса, координаты, коррекция высоты (добавляется к высоте если > 0 - можно поставить здание на здание/поверхность выше земли или повесить в воздухе), Ориентация, Направление.
int SpawnBuilding(string m_Building_Class, vector spawn_Point, float alt_Correct, vector spawn_Orient, vector spawn_Dir) //Спавн
{
Print("::: SpawnBuilding ::: SpawnBuilding(m_Building_Class = " + m_Building_Class + ", spawn_Point = " + spawn_Point.ToString() + ", alt_Correct = " + alt_Correct + ", spawn_Orient = " + spawn_Orient + ", spawn_Dir = " + spawn_Dir + ") :::");
array<Object> nearest_objects = new array<Object>;
array<CargoBase> proxy_cargos = new array<CargoBase>;
string className;
Object object;
float radius = 10;
Object m_Building;
int n_Building_Count = 0;
spawn_Point[1] = GetGame().SurfaceY( spawn_Point[0], spawn_Point[2] );
if (alt_Correct > 0)
{
spawn_Point[1] = spawn_Point[1] + alt_Correct;
}
GetGame().GetObjectsAtPosition(spawn_Point, radius, nearest_objects, proxy_cargos);
Print("::: SpawnBuilding ::: Radius: " + radius.ToString() + ", all nearest_objects: " + nearest_objects.Count().ToString() + " :::");
for ( int i = 0; i < nearest_objects.Count(); i++ )
{
object = nearest_objects.Get(i);
className = object.GetType();
if ( className == m_Building_Class )
{
Print("::: SpawnBuilding ::: Found object: " + object.ToString() + ", className: " + className + ", Position: " + object.GetPosition() + " : Spawn " + m_Building_Class + " cancelled. ::: ");
return 0;
}
}
m_Building = GetGame().CreateObject( m_Building_Class, spawn_Point, false, true );
//m_Building.PlaceOnSurface();
if ( spawn_Orient[0] == 0 && spawn_Orient[1] == 0 && spawn_Orient[2] == 0)
{
m_Building.SetOrientation(m_Building.GetOrientation());
}
else
{
m_Building.SetOrientation(spawn_Orient);
}
if ( spawn_Dir[0] == 0 && spawn_Dir[1] == 0 && spawn_Dir[2] == 0)
{
m_Building.SetDirection(m_Building.GetDirection());
}
else
{
m_Building.SetDirection(spawn_Dir);
}
if (m_Building)
{
Print("::: SpawnBuilding ::: Result: Object: " + m_Building.ToString() + ", spawn_Point = " + m_Building.GetPosition().ToString() + ", alt_Correct = " + alt_Correct + ", spawn_Orient = " + m_Building.GetOrientation().ToString() + ", spawn_Dir = " + m_Building.GetDirection().ToString() + ") :::");
return 1;
}
else
{
Print("::: SpawnBuilding ::: Result: create object error. :::");
}
return 0;
}
void SpawnBuildings()
{
int Buildings_Count;
// пример
Buildings_Count = SpawnBuilding("Land_City_FireStation", "6275 0 8013" , 0, "0 0 0", "0 0 40");
// Buildings_Count будет = 0 если здание не поставлено, 1 если поставлено
}
Простой способ установки
Вставить в init.c (ВНЕ КЛАССА!)
Вызывать в конце main()
вот так
SpawnBuildings();
в функции SpawnBuildings() по примеру (там есть) прописываем какие здания куда, какая ориентация/и или направление