//AUTHOR: BORIZZ.K
//Version 20.12.2018.0011
void PlaceAllCarsToGround()
{
array<Object> nearest_objects = new array<Object>;
array<CargoBase> proxy_cargos = new array<CargoBase>;
Object object;
string className;
int objectcount = 0;
vector mapcenter = "7500 0 7500";
int radius = 20000;
vector foundcar_pos;
mapcenter[1] = GetGame().SurfaceY( mapcenter[0], mapcenter[2] );
GetGame().GetObjectsAtPosition(mapcenter, radius, nearest_objects, proxy_cargos);
for ( int i = 0; i < nearest_objects.Count(); i++ )
{
object = nearest_objects.Get(i);
className = object.GetType();
if ( GetGame().IsKindOf(className, "Car" ) ) //if ( className == "OffroadHatchback" || className == "V3SVehicle" || className == "V3SChassis" || className == "CivilianSedan")
{
EntityAI objectEnt = EntityAI.Cast(object);
if (objectEnt)
{
foundcar_pos = objectEnt.GetPosition();
Print("::: PlaceAllCarsToGround() ::: Found car: " + className + ", objectEnt: " + objectEnt + ", Position: " + foundcar_pos.ToString() + ", SurfaceGetNormal: " + GetGame().SurfaceGetNormal(foundcar_pos[0], foundcar_pos[2]).ToString());
//Check surface under car
/*
string surface_type;
int liquidType;
GetGame().SurfaceUnderObject(object, surface_type, liquidType);
Print("::: PlaceAllCarsToGround() ::: Found car: " + className + ", objectEnt: " + objectEnt + ", surface_type: " + surface_type + ", liquidType: " + liquidType);
*/
if ( foundcar_pos[1] < (GetGame().SurfaceY(foundcar_pos[0], foundcar_pos[2])) - 0.1 || foundcar_pos[1] > (GetGame().SurfaceY(foundcar_pos[0], foundcar_pos[2])) + 0.1 )
{
foundcar_pos[1] = GetGame().SurfaceY(foundcar_pos[0], foundcar_pos[2]);
objectEnt.SetPosition(foundcar_pos);
objectEnt.SetOrientation(objectEnt .GetOrientation());
objectEnt.SetDirection(objectEnt .GetDirection());
Print("::: PlaceAllCarsToGround() ::: Position changed for car : " + className + ", objectEnt: " + objectEnt + ", Position: " + foundcar_pos.ToString());
}
else
{
Print("::: PlaceAllCarsToGround() ::: No position change required for car : " + className + ", objectEnt: " + objectEnt);
}
}
}
}
}
Добавить код в init.c (ВНЕ КЛАССА)
Вызывать в конце функции main()
Просто вставив в конце
PlaceAllCarsToGround();
P.S. Поправил код, + учел рекомендации Ультимы
У меня на сервере с машинами все ок