123new
По поводу получения всех обьектов и его последующего разбора
\brief Returns list of all objects in circle "radius" around position "pos"
@param pos
@param radius
@param objects output array
*/
proto native void GetObjectsAtPosition(vector pos, float radius, out array<Object> objects, out array<CargoBase> proxyCargos);
/**
\brief Returns list of all objects in sphere "radius" around position "pos"
@param pos
@param radius
@param objects output array
*/
proto native void GetObjectsAtPosition3D(vector pos, float radius, out array<Object> objects, out array<CargoBase> proxyCargos);
Вот накропал функцию выводящую в лог кол-во объектов, имена обьектов, их класс и координаты в радиусе
void LogNearestObjects(vector pos, int radius)
{
array<Object> nearest_objects = new array<Object>;
array<CargoBase> proxy_cargos = new array<CargoBase>;
Object object;
string className;
GetGame().GetObjectsAtPosition ( pos, radius, nearest_objects, proxy_cargos );
Print("::: init_mod.c ::: CheckNearestObjects (int radius) ::: Radius: " + radius.ToString() + ", nearest_objects: " + nearest_objects.Count().ToString());
//nearest_objects.Debug();
for ( int i = 0; i < nearest_objects.Count(); i++ )
{
object = nearest_objects.Get(i);
className = object.GetType();
if ( object )
{
Print( "LogNearestObjects: " + i.ToString() + " => " + object.ToString() + " => Type: " + className + " => Position: " + object.GetPosition().ToString());
}
}
}
вывод в лог такой
SCRIPT : LogNearestObjects: 54017 => BushHard<5329e950> => Type: BushHard => Position: <5879.405762, 335.833923, 6919.312012>
SCRIPT : LogNearestObjects: 54018 => Object<1a79e810> => Type: => Position: <5876.990723, 337.467316, 6988.487305>
SCRIPT : LogNearestObjects: 54019 => TreeHard<532a5800> => Type: TreeHard => Position: <5865.421875, 333.517792, 6963.860840>
SCRIPT : LogNearestObjects: 54020 => TreeHard<532a5c50> => Type: TreeHard => Position: <5873.719238, 332.266357, 6964.686035>
S
Любопытно, что за обьект такой Object<1a79e810> по о которому GetType() не возвращает его тип?
Можно в цикл добавить сверку типа и в зависимости от типа делать что необходимо
массив еще можно вывести в script.log с помощью nearest_objects.Debug();
Вывод будет такой:
SCRIPT : string s = 'Array count: 21986'
SCRIPT : string s = '[0] => TreeHard<45d4e4e0>'
SCRIPT : string s = '[1] => BushHard_b_prunusSpinosa_1s<45d4e7c0>'
SCRIPT : string s = '[2] => TreeHard<45d4eef0>'
SCRIPT : string s = '[3] => Object<d7de290>'
SCRIPT : string s = '[4] => Object<d7deef0>'
SCRIPT : string s = '[5] => Object<d7de970>'
SCRIPT : string s = '[6] => Object<d7de6b0>'
SCRIPT : string s = '[7] => TreeHard<45d4f790>'
SCRIPT : string s = '[8] => Object<d7df050>'
SCRIPT : string s = '[9] => Object<d7df1b0>'
SCRIPT : string s = '[10] => Object<d7ded90>'
SCRIPT : string s = '[11] => Object<d7dd210>'
SCRIPT : string s = '[12] => Object<d7dd4d0>'
SCRIPT : string s = '[13] => BushHard_b_prunusSpinosa_1s<471f77c0>'
итп
И есть еще вопросы, на которые ответов пока не нахожу
1. Возможно ли собрать в массив только обьекты типа игрок, или типа автомобиль - те определенного класса...
2. Чем отличаются
ref array<Object> nearest_objects = new array<Object>;
и
array<Object> nearest_objects = new array<Object>;
3. И как можно обьявить переменную, что бы она была доступна во всех функциях любого класса на стороне сервера - те глобальную...