Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной

Рекомендованные сообщения

Спасибо большое за помощь Ramond

 

И так, речь пойдет о прорисовке объектов на карте у клиента только в радиусе его обитания!

Тесты еще по фпс толком не проводил, но тему нужно развить, так как не хотелось оффтопить в другой теме

 

начнем:

 

1)

 

 

нам понадобится файл со списком объектов добавленных в массив ( переделанный файл dayz_server\missions\DayZ_Epoch_11.Chernarus\mission.sqf)

 

Скачать с дополнительными постройками, если что, удаляем лишнее для вас (сектор FNG, Трасса,  доп. казармы + пожарка, снеговики )

 

Вынесенные сами торговцы в отдельный файл Скачать

 

Это все ложем в dayz_server\missions\DayZ_Epoch_11.Chernarus\  и запаковываем обратно

 

 

 

 

 

 

Программа для конвертирования из формата редактора в формат динамических построек

 

2)

 

 

Открываем init.sqf В папке с вашей миссией

 

В блок

 

 

if (isServer) then {
    
   ..............
};
 

Вставляем :

 

 

_nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\traders.sqf";
 

У вас должно получится два подгружаемых файла в этом блоке:

 

 

 

  // Add trader citys
    _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\mission.sqf";
    _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\traders.sqf";
 

 

 

Здесь же ищем блок:

 

 

if (!isDedicated) then {
..........................
};
 

В этот блок прописываем

 

 

#include "client_init.sqf";
 

 

 

 

 

 

3)

 

 

 

Создаем в корне миссии файл client_init.sqf с таким содержимым:

 

 

[] spawn {

        private ["_objects","_total","_spawned","_upd_range","_pos_player","_object","_t","_moved","_a","_r"];

        PVDZE_load_objects = player;
        publicVariableServer "PVDZE_load_objects";

        waitUntil{!isNil "allObjects"};

        if(DZEdebug) then {    diag_log format["[DynObj] Receiving object from server took %1s",str (diag_tickTime - _t1)]; };

        waitUntil {!isNil "dayz_animalCheck"};

        _objects     = allObjects;
        allObjects     = nil;
        _total        = count _objects;
        _spawned     = [];
        _upd_range     = 300;
        _pos_player = getPos player;
        
        _t = diag_tickTime;
        {
            _object = (_x select 0) createVehicleLocal [0,0,0];
            _object setDir (_x select 2);
            _object setPos (_x select 1);

            if(count _x > 3 && (_x select 3)) then {
                _object setVehicleLock "LOCKED";
            };

            _spawned set[count _spawned,[_object,_x]];
        } count _objects;

        _objects = [];

        diag_log format["[DynObj] Initializing %2 objects in %1s ",str(diag_tickTime - _t),_total];

        while{alive player} do {

            _moved = _pos_player distance player;

            if(_moved > _upd_range) then { // Only update when player has moved at least _upd_range meters from his last saved position

                if(DZEdebug) then {
                    systemChat format["[DynObj] Player moved %1m since last cycle, checking for new/removable objects",_moved];

                     _t = diag_tickTime; // start timer for debug purposes
                    _a = 0; // keep track of how many objects added this cycle
                    _r = 0; // keep track of how many objects removed this cycle
                };

                _pos_player = getPos player;
                _i             = 0; // keep track of object index (outperforms forEach / _foreachIndex)

                {

                    if(player distance (_x select 1) < 1500) then {
                        _object = (_x select 0) createVehicleLocal [0,0,0];
                        _object setDir (_x select 2);
                        _object setPos (_x select 1);

                        if(count _x > 3 && (_x select 3)) then {
                            _object setVehicleLock "LOCKED";
                        };

                        if(DZEdebug) then { _a = _a + 1; };

                        _spawned set[count _spawned,[_object,_x]];
                        _objects set[_i,-1];
                    };
                    _i = _i + 1;
                } count _objects;

                _objects = _objects - [-1]; // remove added objects from objects array
                _i = 0;    // reset counter for use in spawned array

                {
                    if(player distance (_x select 0) > 1750) then {
                        _spawned set[_i,-1];
                        _objects set[count _objects, (_x select 1)];
                        deleteVehicle (_x select 0);
                        if(DZEdebug) then { _r = _r + 1; };
                    };
                    _i = _i + 1;
                } count _spawned;

                _spawned = _spawned - [-1];

                if(DZEdebug) then {
                    diag_log format["[DynObj] Added % objects - removed %2 objects - total active %3 - cycle took %4s",_a,_r,count _spawned,str (diag_tickTime - _t)];
                };

            } else {
                if(DZEdebug) then { diag_log format["[DynObj] Player moved %1m, not updating until %2m",_moved,_upd_range]; };
            };

            if(_moved > _upd_range-(_upd_range/4)) then {
                sleep 3; // almost at the edge, updating faster
            } else {
                sleep 6;
            };

        };
        
    };
 

 

 

Сохраняем

 

 

 

 

И самое важное, не забываем добавить в publicvariable.txt

 

!="PVDZE_load_objects"
 

 

 

Первоисточник

Изменено пользователем thorus (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





Файл mission.sqf был переработан мной, этот файл относится к постройкам черноруссии, в него так же были добавлены некоторые мои постройки, но для гайда я их вырезал, если нужно, могу выложить полный, просто каждый может удалить все что не нужно

Изменено пользователем thorus (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо большое за помощь игроку Ramond

 

И так, речь пойдет о прорисовке объектов на карте у клиента только в радиусе его обитания!

Тесты еще по фпс толком не проводил, но тему нужно развить, так как не хотелось оффтопить в другой теме

 

начнем:

 

1)

 

 

нам понадобится файл со списком объектов добавленных в массив ( переделанный файл dayz_server\missions\DayZ_Epoch_11.Chernarus\mission.sqf)

 

Скачать

 

Вынесенные сами торговцы в отдельный файл Скачать

 

Это все ложем в dayz_server\missions\DayZ_Epoch_11.Chernarus\  и запаковываем обратно

 

 

 

 

 

2)

 

 

Открываем init.sqf В папке с вашей миссией

 

В блок

 

 

if (isServer) then {
    
   ..............
};
 

Вставляем :

 

 

_nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\traders.sqf";
 

У вас должно получится два подгружаемых файла в этом блоке:

 

 

 

  // Add trader citys
    _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\mission.sqf";
    _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\traders.sqf";
 

 

 

Здесь же ищем блок:

 

 

if (!isDedicated) then {
..........................
};
 

В этот блок прописываем

 

 

#include "client_init.sqf";
 

 

 

 

 

 

3)

 

 

 

Создаем в корне миссии файл client_init.sqf с таким содержимым:

 

 

[] spawn {

        private ["_objects","_total","_spawned","_upd_range","_pos_player","_object","_t","_moved","_a","_r"];

        PVDZE_load_objects = player;
        publicVariableServer "PVDZE_load_objects";

        waitUntil{!isNil "allObjects"};

        if(DZEdebug) then {    diag_log format["[DynObj] Receiving object from server took %1s",str (diag_tickTime - _t1)]; };

        waitUntil {!isNil "dayz_animalCheck"};

        _objects     = allObjects;
        allObjects     = nil;
        _total        = count _objects;
        _spawned     = [];
        _upd_range     = 300;
        _pos_player = getPos player;
        
        _t = diag_tickTime;
        {
            _object = (_x select 0) createVehicleLocal [0,0,0];
            _object setDir (_x select 2);
            _object setPos (_x select 1);

            if(count _x > 3 && (_x select 3)) then {
                _object setVehicleLock "LOCKED";
            };

            _spawned set[count _spawned,[_object,_x]];
        } count _objects;

        _objects = [];

        diag_log format["[DynObj] Initializing %2 objects in %1s ",str(diag_tickTime - _t),_total];

        while{alive player} do {

            _moved = _pos_player distance player;

            if(_moved > _upd_range) then { // Only update when player has moved at least _upd_range meters from his last saved position

                if(DZEdebug) then {
                    systemChat format["[DynObj] Player moved %1m since last cycle, checking for new/removable objects",_moved];

                     _t = diag_tickTime; // start timer for debug purposes
                    _a = 0; // keep track of how many objects added this cycle
                    _r = 0; // keep track of how many objects removed this cycle
                };

                _pos_player = getPos player;
                _i             = 0; // keep track of object index (outperforms forEach / _foreachIndex)

                {

                    if(player distance (_x select 1) < 1500) then {
                        _object = (_x select 0) createVehicleLocal [0,0,0];
                        _object setDir (_x select 2);
                        _object setPos (_x select 1);

                        if(count _x > 3 && (_x select 3)) then {
                            _object setVehicleLock "LOCKED";
                        };

                        if(DZEdebug) then { _a = _a + 1; };

                        _spawned set[count _spawned,[_object,_x]];
                        _objects set[_i,-1];
                    };
                    _i = _i + 1;
                } count _objects;

                _objects = _objects - [-1]; // remove added objects from objects array
                _i = 0;    // reset counter for use in spawned array

                {
                    if(player distance (_x select 0) > 1750) then {
                        _spawned set[_i,-1];
                        _objects set[count _objects, (_x select 1)];
                        deleteVehicle (_x select 0);
                        if(DZEdebug) then { _r = _r + 1; };
                    };
                    _i = _i + 1;
                } count _spawned;

                _spawned = _spawned - [-1];

                if(DZEdebug) then {
                    diag_log format["[DynObj] Added % objects - removed %2 objects - total active %3 - cycle took %4s",_a,_r,count _spawned,str (diag_tickTime - _t)];
                };

            } else {
                if(DZEdebug) then { diag_log format["[DynObj] Player moved %1m, not updating until %2m",_moved,_upd_range]; };
            };

            if(_moved > _upd_range-(_upd_range/4)) then {
                sleep 3; // almost at the edge, updating faster
            } else {
                sleep 6;
            };

        };
        
    };
 

 

 

Сохраняем

 

 

 

 

И самое важное, не забываем добавить в publicvariable.txt

 

!="PVDZE_load_objects"
 

 

Если что забыл, поправлю, не ругать строго)

 

Первоисточник

Проверил всё работает построек нет пока нет игроков рядом,только торговцы стоят на своих местах.Спасибо за гайд

Изменено пользователем Vitalik (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Проверил всё работает построек нет пока нет игроков рядом,только торговцы стоят на своих местах.Спасибо за гайд

Я еще сам тестирую, проверяю как и что

 

Какая переменная отвечает за серверный фпс? хочу вывести в админ дебаг ее, чтоб видеть, если это возможно

Изменено пользователем thorus (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я еще сам тестирую, проверяю как и что

 

Какая переменная отвечает за серверный фпс? хочу вывести в админ дебаг ее, чтоб видеть, если это возможно

Вот это без понятия даже,слушай а выложи свой файл с дополнительными твоими постройками 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я еще сам тестирую, проверяю как и что

 

Какая переменная отвечает за серверный фпс? хочу вывести в админ дебаг ее, чтоб видеть, если это возможно

diag_fps

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не увидел примера новой структуры mission.sqf. Кратко о том как перевести в новый формат:

 

Берем стандартный код объектов:
_vehicle_1 = objNull;
if (true) then
{
  _this = createVehicle ["MAP_Mil_Barracks_i", [18149.762, 2082.8643, 0.044930469], [], 0, "CAN_COLLIDE"];
  _vehicle_1 = _this;
  _this setDir 40.678017;
  _this setPos [18149.762, 2082.8643, 0.044930469];
};

_vehicle_2 = objNull;
if (true) then
{
  _this = createVehicle ["MAP_Mil_House", [18119.195, 2022.3765, 0.00010681152], [], 0, "CAN_COLLIDE"];
  _vehicle_2 = _this;
  _this setDir 95.604897;
  _this setPos [18119.195, 2022.3765, 0.00010681152];
};

...
...
...

_vehicle_115 = objNull;
if (true) then
{
  _this = createVehicle ["MAP_Misc_PowerStation", [18292.102, 2247.5325, 0.63055074], [], 0, "CAN_COLLIDE"];
  _vehicle_115 = _this;
  _this setDir 40.77528;
  _this setPos [18292.102, 2247.5325, 0.63055074];
};

 

Переводим по формуле ["ObjectName",[setPosX,setPosY,setPosZ],setDir], в результате должно получиться так:
"PVDZE_load_objects" addPublicVariableEventHandler {
    allObjects = [
    ["Land_Mil_Barracks_i",[18149.762,2082.8643,0.044930469],40.678017],
    ["Land_Mil_House",[18119.26,2022.3821,0.00010681152],95.604897],
...
...
...
    ["Land_Misc_PowerStation",[18292.102,2247.5325,0.63055074],40.77528]
    ],
    owner (_this select 1) publicVariableClient "allObjects";
};

Внимание! У последнего объекта запятой быть не должно!

 

 

Файл traders.sqf должен выглядеть примерно так:


_unit_31 = objNull;
if (true) then
{
  _this = createAgent ["Soldier_MG_PKM_PMC", [8264.5371, 15495.855, 3.7374172], [], 0, "CAN_COLLIDE"];
  _unit_31 = _this;
  _this setDir 56.102802;
  _this setVehicleInit "this allowDammage false; this disableAI 'FSM'; this disableAI 'MOVE'; this disableAI 'AUTOTARGET'; this disableAI 'TARGET'; this setBehaviour 'CARELESS'; this forceSpeed 0;";
  _this setUnitAbility 0.60000002;
_this allowDammage false; _this disableAI 'FSM'; _this disableAI 'MOVE'; _this disableAI 'AUTOTARGET'; _this disableAI 'TARGET'; _this setBehaviour 'CARELESS'; _this forceSpeed 0;_this enableSimulation false;};


_unit_32 = objNull;
if (true) then
{
  _this = createAgent ["GUE_Woodlander3", [8266.668, 15482.221, 0.10264076], [], 0, "CAN_COLLIDE"];
  _unit_32 = _this;
  _this setDir -141.76392;
  _this setVehicleInit "this allowDammage false; this disableAI 'FSM'; this disableAI 'MOVE'; this disableAI 'AUTOTARGET'; this disableAI 'TARGET'; this setBehaviour 'CARELESS'; this forceSpeed 0;";
  _this setUnitAbility 0.60000002;
_this allowDammage false; _this disableAI 'FSM'; _this disableAI 'MOVE'; _this disableAI 'AUTOTARGET'; _this disableAI 'TARGET'; _this setBehaviour 'CARELESS'; _this forceSpeed 0;_this enableSimulation false;};

...
...
...


_unit_263 = objNull;
if (true) then
{
  _this = createAgent ["pook_Doc_Bell47", [8269.4893, 15490.62, 3.3378601e-006], [], 0, "CAN_COLLIDE"];
  _unit_263 = _this;
  _this setDir -104.75245;
  _this setVehicleInit "this allowDammage false; this disableAI 'FSM'; this disableAI 'MOVE'; this disableAI 'AUTOTARGET'; this disableAI 'TARGET'; this setBehaviour 'CARELESS'; this forceSpeed 0;  ";
  _this setUnitAbility 0.60000002;
_this allowDammage false; _this disableAI 'FSM'; _this disableAI 'MOVE'; _this disableAI 'AUTOTARGET'; _this disableAI 'TARGET'; _this setBehaviour 'CARELESS'; _this forceSpeed 0;_this enableSimulation false;};


processInitCommands;

 

Дистанцию подгрузки и выгрузки объектов можно изменить в client_init.sqf:

                {
                    if(player distance (_x select 1) < 1500) then { // настройка дистанции
                        _object = (_x select 0) createVehicleLocal [0,0,0];
                        _object setDir (_x select 2);
                        _object setPos (_x select 1);

                        if(count _x > 3 && (_x select 3)) then {
                            _object setVehicleLock "LOCKED";
                        };

                        if(DZEdebug) then { _a = _a + 1; };

                        _spawned set[count _spawned,[_object,_x]];
                        _objects set[_i,-1];
                    };
                    _i = _i + 1;
                } count _objects;

                _objects = _objects - [-1]; // remove added objects from objects array
                _i = 0;    // reset counter for use in spawned array

                {
                    if(player distance (_x select 0) > 1750) then { // настройка дистанции
                        _spawned set[_i,-1];
                        _objects set[count _objects, (_x select 1)];
                        deleteVehicle (_x select 0);
                        if(DZEdebug) then { _r = _r + 1; };
                    };
                    _i = _i + 1;
                } count _spawned;

 

 

Добавлю немного готовых решений для карты NAPF.

 

Асфальтированная дорога в торговый город Шраттен:

    //NAPF asphalted road Trader City Schratten
    ["MAP_kr_t_asf2_asf2",[12961.76,5964.8501,0.15310472],-10.671323],
    ["MAP_asf2_7_100",[12930.017,5960.1909],77.587875],
    ["MAP_asf2_7_100",[12955.713,5963.6875,1.5258789e-005],-100.71323],
    ["MAP_asf2_7_100",[12917.463,5956.6279,6.1035156e-005],70.514389],
    ["MAP_asf2_7_100",[12905.515,5951.5269,-0.00010681152],63.253605],
    ["MAP_asf2_7_100",[12894.314,5945.0688,-1.5258789e-005],56.341312],
    ["MAP_asf2_1_1000",[12879.95,5935.3545,-1.5258789e-005],55.49305],
    ["MAP_asf2_7_100",[12869.803,5927.2026,4.5776367e-005],47.660374],
    ["MAP_asf2_1_1000",[12856.908,5915.7285,4.5776367e-005],47.868805],
    ["MAP_asf2_1_1000",[12844.306,5903.8462,0.00012207031],46.32745],
    ["MAP_asf2_7_100",[12835.914,5894.1909,4.5776367e-005],36.739189],
    ["MAP_asf2_7_100",[12829.659,5882.9961,4.5776367e-005],25.568272],
    ["MAP_asf2_1_1000",[12823.605,5867.1274,0],20.118275],
    ["MAP_asf2_0_2000",[12817.941,5850.8198,6.1035156e-005],18.996674],
    ["MAP_asf2_0_2000",[12812.266,5834.458,-1.5258789e-005],18.961143],
    ["MAP_asf2_0_2000",[12806.635,5818.0415,6.1035156e-005],18.447439],
    ["MAP_asf2_0_2000",[12801.018,5801.6597,-6.1035156e-005],18.669155],
    ["MAP_asf2_7_100",[12801.099,5801.8203,6.1035156e-005],201.17354],
    ["MAP_asf2_7_100",[12795.614,5789.9873,-3.0517578e-005],209.06213],
    ["MAP_asf2_0_2000",[12788.701,5779.2607,4.5776367e-005],-140.57358],
    ["MAP_asf2_0_2000",[12777.543,5765.9336,0.00010681152],-139.87437],
    ["MAP_asf2_0_2000",[12766.168,5752.8398,0],-139.17378],
    ["MAP_asf2_0_2000",[12754.739,5739.7109,-4.5776367e-005],-138.42322],
    ["MAP_asf2_7_100",[12743.185,5726.8022,0.00015258789],222.39578],
    ["MAP_asf2_7_100",[12733.965,5717.9482,0.00015258789],228.63528],
    ["MAP_asf2_0_2000",[12723.871,5710.1357,1.5258789e-005],-127.61487],
    ["MAP_asf2_0_2000",[12710.236,5699.7227,0.00018310547],-130.19102],
    ["MAP_asf2_22_50",[12684.475,5673.5396,-0.00024414063],28.383541],
    ["MAP_asf2_0_2000",[12675.876,5658.6016,-3.0517578e-005],29.571743],
    ["MAP_asf2_0_2000",[12667.312,5643.4717,0.00015258789],29.093756],
    ["MAP_asf2_0_2000",[12658.713,5628.5283,4.5776367e-005],29.571743],
    ["MAP_asf2_0_2000",[12650.103,5613.521,6.1035156e-005],29.571743],
    ["MAP_asf2_0_2000",[12641.524,5598.583,1.5258789e-005],29.571743],
    ["MAP_asf2_22_50",[12634.366,5580.7642,7.6293945e-005],10.591627],
    ["MAP_asf2_0_2000",[12630.915,5563.8789,-1.5258789e-005],11.410409],
    ["MAP_asf2_0_2000",[12629.36,5525.4233,-3.0517578e-005],-168.01964],
    ["MAP_asf2_22_50",[12629.826,5544.7173,-4.5776367e-005],-7.9248333],
    ["MAP_asf2_22_50",[12629.801,5544.8755,4.5776367e-005],170.0592],
    ["MAP_asf2_0_2000",[12618.268,5490.7397,0.00012207031],-144.99414],
    ["MAP_asf2_22_50",[12625.673,5508.4951,4.5776367e-005],191.4584],
    ["MAP_asf2_0_2000",[12608.246,5476.562,-0.00010681152],-144.99414],
    ["MAP_asf2_0_2000",[12598.226,5462.4521,-0.00019836426],-144.99414],
    ["MAP_asf2_22_50",[12581.991,5430.1714,-7.6293945e-005],8.0685301],
    ["MAP_asf2_0_2000",[12579.054,5413.1895,0.00010681152],9.6576042],
    ["MAP_asf2_22_50",[12579.195,5413.71,4.5776367e-005],-166.46851],
    ["MAP_asf2_22_50",[12571.106,5396.1196,-6.1035156e-005],-142.16188],
    ["MAP_asf2_0_2000",[12556.486,5383.4302,0],-120.19775],
    ["MAP_asf2_0_2000",[12541.514,5374.7935,4.5776367e-005],-120.19775],
    ["MAP_asf2_0_2000",[12526.5,5366.1313,-1.5258789e-005],-120.19775],
    ["MAP_asf2_0_2000",[12511.476,5357.4668,3.0517578e-005],-120.19775],
    ["MAP_asf2_22_50",[12481.611,5336.3604,-9.1552734e-005],38.767746],
    ["MAP_asf2_0_2000",[12471.125,5322.6348,0.00021362305],37.194469],
    ["MAP_asf2_0_2000",[12462.639,5308.0112,0.00010681152],30.022554],
    ["MAP_asf2_22_50",[12456.357,5289.7759,0.00010681152],7.7718935],
    ["MAP_asf2_22_50",[12456.412,5289.9404,4.5776367e-005],188.39738],
    ["MAP_asf2_0_2000",[12449.95,5271.7358,0],-151.13425],
    ["MAP_asf2_0_2000",[12441.505,5256.585,-1.5258789e-005],-150.38803],
    ["MAP_asf2_0_2000",[12432.807,5241.5347,1.5258789e-005],-150.38803],
    ["MAP_asf2_0_2000",[12424.162,5226.4478,1.5258789e-005],-150.38803],
    ["MAP_asf2_0_2000",[12415.536,5211.4189,-1.5258789e-005],-150.38803],
    ["MAP_asf2_0_2000",[12406.978,5196.5063,-1.5258789e-005],-150.38803],
    ["MAP_asf2_22_50",[12391.285,5163.417,1.5258789e-005],10.087194],
    ["MAP_asf2_0_2000",[12388.303,5146.2896,-1.5258789e-005],9.7330446],
    ["MAP_asf2_0_2000",[12386.209,5129.2861,4.5776367e-005],6.7555504],
    ["MAP_asf2_22_50",[12388.193,5110.2261,1.5258789e-005],-17.109587],
    ["MAP_asf2_0_2000",[12393.962,5093.9917,6.1035156e-005],-19.840439],
    ["MAP_asf2_6konec",[12396.037,5088.2959,-6.1035156e-005],-19.853428],
    ["MAP_t_pyrus2s",[12381.131,5078.8618,-1.2484815],25.367994],
    ["MAP_t_quercus2f",[12402.81,5104.4409,0.34566125],-90.784027],
    ["MAP_t_populus3s",[12391.747,5122.624,-3.0517578e-005],25.872578],
    ["MAP_t_pinusS2f",[12419.986,5046.5391,-0.00015258789],16.578789],
    ["MAP_t_populus3s",[12395.714,5150.7075,-3.0517578e-005],20.484444],
    ["MAP_t_populus3s",[12404.16,5178.7041,4.5776367e-005],20.484444],
    ["MAP_t_populus3s",[12437.676,5237.1641,-0.00010681152],20.484444],
    ["MAP_t_populus3s",[12453.387,5265.4536,0.12509425],31.977455],
    ["MAP_t_populus3s",[12463.763,5295.6968,0.078610808],-17.665117],
    ["MAP_t_populus3s",[12483.958,5327.5596,7.6293945e-005],20.484444],
    ["MAP_t_populus3s",[12507.187,5347.0508,-0.00019836426],20.484444],
    ["MAP_t_populus3s",[12534.619,5363.5791,-6.1035156e-005],20.484444],
    ["MAP_t_populus3s",[12572.636,5389.1646,-0.00021362305],20.484444],
    ["MAP_t_populus3s",[12585.167,5407.8857,1.5258789e-005],20.484444],
    ["MAP_t_populus3s",[12594.908,5443.7573,4.5776367e-005],20.484444],
    ["MAP_t_populus3s",[12628.753,5494.4067,0.00016784668],20.484444],
    ["MAP_t_populus3s",[12634.842,5518.8501,-0.00012207031],20.484444],
    ["MAP_t_populus3s",[12643.348,5583.519,-0.00015258789],20.484444],
    ["MAP_t_populus3s",[12692.736,5671.7485,3.0517578e-005],20.484444],
    ["MAP_t_populus3s",[12730.438,5705.6533,0.00016784668],20.484444],
    ["MAP_t_populus3s",[12768.995,5744.1948,4.5776367e-005],20.484444],
    ["MAP_t_populus3s",[12801.028,5784.0645,3.0517578e-005],20.484444],
    ["MAP_t_populus3s",[12814.593,5815.8687,3.0517578e-005],20.484444],
    ["MAP_t_populus3s",[12826.802,5850.1631,6.1035156e-005],20.484444],
    ["MAP_t_populus3s",[12840.684,5886.2412,-3.0517578e-005],20.484444],
    ["MAP_t_populus3s",[12870.388,5917.1426,0.00024414063],20.484444],
    ["MAP_t_populus3s",[12901.829,5940.2227,0.00021362305],20.484444],
    ["MAP_t_populus3s",[12931.166,5953.0938,-0.0001373291],20.484444],
    ["MAP_t_populus3s",[12955.889,5956.7402,6.1035156e-005],20.484444],
    ["MAP_t_populus3s",[12675.719,5643.7969,0.20396914],-44.703213],
    ["MAP_t_populus3s",[12654.184,5607.1416,0.15627691],-34.953941],
    ["MAP_t_populus3s",[12421.755,5209.5605,0.16859712],20.484444],
    ["MAP_t_populus3s",[12783.314,5762.4585,-3.0517578e-005],-20.693563],
    ["MAP_t_pyrus2s",[12379.632,5092.2349,0.20175517],-142.66637],
    ["MAP_t_pinusN2s",[12378.704,5107.3486,0.1038281],22.037758],
    ["MAP_t_fraxinus2W",[12413.718,5043.3687,3.0517578e-005],-9.7274151],
    ["ClutterCutter_EP1",[12838.171,5873.1226,6.1035156e-005],0],
    ["ClutterCutter_EP1",[12834.66,5892.0098,4.5776367e-005],0],
    ["ClutterCutter_small_EP1",[12841.059,5900.2749,9.1552734e-005],0],
    ["ClutterCutter_small_EP1",[12847.492,5907.1162,0.00010681152],0],
    ["ClutterCutter_small_EP1",[12854.642,5913.7441,9.1552734e-005],0],
    ["ClutterCutter_small_EP1",[12863.591,5922.187,-7.6293945e-005],0],
    ["ClutterCutter_small_EP1",[12872.363,5929.5669,3.0517578e-005],0],
    ["ClutterCutter_small_EP1",[12878.904,5933.5049,-3.0517578e-005],0],
    ["ClutterCutter_small_EP1",[12884.042,5938.0298,-1.5258789e-005],0],
    ["ClutterCutter_small_EP1",[12894.727,5945.7837,4.5776367e-005],0],
    ["ClutterCutter_small_EP1",[12906.163,5952.4795,0],0],
    ["ClutterCutter_small_EP1",[12923.688,5958.4336,9.1552734e-005],0],

 

Южный аэродром:

    //South Airfield
    ["Land_Mil_Barracks_i",[18135.889,2066.3982,-0.1007977],40.678017],
    ["Land_Mil_Barracks_i",[18142.84,2074.5413,-0.10120597],40.678017],
    ["Land_Mil_Barracks_i",[18149.762,2082.8643,0.044930469],40.678017],
    ["Land_Mil_House",[18119.26,2022.3821,0.00010681152],95.604897],
    ["Land_Misc_PowerStation",[18292.102,2247.5325,0.63055074],40.77528],
    ["Land_Ind_TankSmall2",[18306.32,2262.9219,-0.051772546],40.199081],
    ["Land_Ind_Workshop01_01",[18347.258,2310.3188,0.071510009],-15.696789],
    ["Land_Ind_Workshop01_L",[18351.926,2300.7358,9.1552734e-005],-15.102435],
    ["Land_Ind_Workshop01_02",[18344.361,2294.5403,0.080210939],75.138786],
    ["Land_a_stationhouse",[18379.014,2306.6187,0.14486513],-15.492865],
    ["Land_Mil_Barracks",[18157.201,2092.0188,0.044887237],39.95377],
    ["Land_Mil_Barracks",[18165.625,2102.1077,0.034802496],40.140522],
    ["Land_Mil_Mil_Guardhouse",[18224.063,2164.9766,0.52437258],-139.96834],
    ["Land_Barrack2",[18216.773,2153.9507,-0.29207313],-140.27924],
    ["Land_Barrack2",[18210.078,2145.9851,-0.13304824],40.30899],

 

THORUS, читай ЛС.

 

Ув.модераторы, поправьте ошибку в названии темы, вместо "Динамиеские" - "Динамические" 

Изменено пользователем Ramond (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот это без понятия даже,слушай а выложи свой файл с дополнительными твоими постройками 

Ссылка с моими объектами

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спасибо

Перекачай файл из шапки, там в твоем запятая пропущена была

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Перекачай файл из шапки, там в твоем запятая пропущена была

я че то уже пол часа сижу и с шапки пробовал и ото всюду не появляются вообще объекты не че понять не могу вчера работало  :smile:  сейчас ещё буду пробовать спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

diag_fps

это разве серверный? это клиентский вроде как

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я че то уже пол часа сижу и с шапки пробовал и ото всюду не появляются вообще объекты не че понять не могу вчера работало  :smile:  сейчас ещё буду пробовать спасибо

 

удали сектор, я его сегодня доделывал, может где что и забыл вписать

 

я че то уже пол часа сижу и с шапки пробовал и ото всюду не появляются вообще объекты не че понять не могу вчера работало  :smile:  сейчас ещё буду пробовать спасибо

Забирай из шапки, ссылку в шапке не обновил просто, уже все ок, и перепроверил

 

Как раз проверял сектор и подтвердились ожидания))) для ботов этих построек не существует, ботовские пули пролетают насквозь

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

для ботов этих построек не существует

 

Вот что говорят на этот счет авторы:

 

Предлагается использовать createVehicleLocal скрипт в серверной части.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Вот что говорят на этот счет авторы:

 

Предлагается использовать createVehicleLocal скрипт в серверной части.

 

Дома буду, посмотрим на этот счет

А то на работе у меня епочмод блокируется сисадминами)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дома буду, посмотрим на этот счет А то на работе у меня епочмод блокируется сисадминами)

 

Не совсем понятно что они имеют в виду. В своих стресс-тестах используется немного другой код. Статистика конечно положительная. Сервер с свежей БД (стандартной) и дистанцией видимости 1600 падает при спавне 100 000 динамическикх объектов, когда при тех же параметрах достаточно 30 000 глобальных объектов для падения сервера. Вывод: комфортно при хорошем онлайне можно смело использовать 10 000 - 20 000 динамических объектов без ущерба производительности.

Изменено пользователем Ramond (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

в дополнение к гайду скину ссылку на программу для перевода из формата редактора в формат под динамические постройки
http://s-platoon.ru/index.php?/topic/4596-programma-dlia-konvertirovaniia-iz-formata-reda/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я че то уже пол часа сижу и с шапки пробовал и ото всюду не появляются вообще объекты не че понять не могу вчера работало  :smile:  сейчас ещё буду пробовать спасибо

скрипт предназначен только для 1 файла,нужно все постройки в 1 файл пихать,иначе работать не будет

сам долго голову ломал

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Удачи с использованием) Почитали бы чтоль баг репорты, и там же выкладка есть по замерам ФПС.

Дурацкий скрипт, и не вытянет своего предназначения.

Баги попрут только в путь.

1. Лут - глобальный. Каждый игрок создавая себе через локал объект будет спавнить лут.

2. Один игрок сломл домик, и ушел, другой подбежал и домик целенький. т.к. по скрипту он его локально создает.

3. Техника....... ну тут вообще молчу.

4. Отсутствие синхронизации звука, анимации, и т.д. и т.п.

 

Да и прирост при удалении\создании во время выделения памяти, будет тааааким сомнительным...

 

А попросту - взяли и попробовали свалить постройки с сервака на бедных клиентов.

 

Юзать надо волшебные функции армы -

hideObject

enableSimulation

и т.п.

И юзать их надо на ботов, а на статике все это никак не сказывается. Один хрен все в проксиках.

Отключение симуляции, на миссиях при отсутствии внутри триггер зоны игроков, даст прирост, и серверу и клиентам.

Скрытие объектов даст прирост только при небольшой визуальной дальности отображения. - Когда скрывают объекты дальше ~800м, а то что там дальше 2.5км уже значения не имеет ни какого.

 

И мне интересно -

А если тело летит на вертолете, этж с какой еб эпической скоростью будут удаляться\создаваться объекты, отрисовываться скрытые, включаться\выключаться симуляция....

Полный алес.

Ну это все мое имхо.))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

1. Лут - глобальный. Каждый игрок создавая себе через локал объект будет спавнить лут. 2. Один игрок сломл домик, и ушел, другой подбежал и домик целенький. т.к. по скрипту он его локально создает. 3. Техника....... ну тут вообще молчу. 4. Отсутствие синхронизации звука, анимации, и т.д. и т.п.

 

Ничего из перечисленного за год использования не наблюдалось.

1. Лут спавнится как обычно, для каждого свой, удаляется по очистке server_functions. Для лута это вообще не используется никак. Не надо вводить в заблуждение.

2. Постройки только те, которые прописываются в mission.sqf, пользовательские не участвуют. 

3. Техника? Транспорт тем более никакого отношения не имеет. Смотри код скрипта.

4. Анимация? О какой анимации и звуке идет речь? Дверей? Ворот? Это вообще никак не влияет на производительность, на стабильность и подавно.

 

В итоге у клиентов вырос fps, просадок вообще нет, без этого при входе в любой город сразу существенно снижался. Каких либо багов тоже замечено не было.

Свое имхо это хорошо, но в действительности все иначе. Если бы не пользовался этим уже год, не стал бы говорить.

 

Я не понимаю, откуда такое неприятие этого скрипта? Или это было в приватном разделе на коммерческих рельсах, а я пришел и весь ваш бизнес испортил?

То эпочевцы украли код, то это вообще скрипт плохой и от него будет только хуже. Может хватит уже?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ничего из перечисленного за год использования не наблюдалось.

1. Лут спавнится как обычно, для каждого свой, удаляется по очистке server_functions. Для лута это вообще не используется никак. Не надо вводить в заблуждение.

2. Постройки только те, которые прописываются в mission.sqf, пользовательские не участвуют. 

3. Техника? Транспорт тем более никакого отношения не имеет. Смотри код скрипта.

4. Анимация? О какой анимации и звуке идет речь? Дверей? Ворот? Это вообще никак не влияет на производительность, на стабильность и подавно.

 

В итоге у клиентов вырос fps, просадок вообще нет, без этого при входе в любой город сразу существенно снижался. Каких либо багов тоже замечено не было.

Свое имхо это хорошо, но в действительности все иначе. Если бы не пользовался этим уже год, не стал бы говорить.

 

Я не понимаю, откуда такое неприятие этого скрипта? Или это было в приватном разделе на коммерческих рельсах, а я пришел и весь ваш бизнес испортил?

То эпочевцы украли код, то это вообще скрипт плохой и от него будет только хуже. Может хватит уже?

Мне плевать на скрпт, и на коммерческую ветку, и никакого подобного скрипта там не было.

Тут ставят скрипты 90% вообще не понимая за каким хреном это делают.

И если ты предлогаешь ставить это УГ(а это УГ) то распиши вменяемо.

 

P.S. К выше написаному, - какой код украли? Где я это писал? - Про формат данных? Я там написал что мне насрать вроде не?

 

 

Теперь по скриптам этим -

 

Епрст, а лут что не привязан к зданию? - Посмотри cfgBuildingLoot.hpp

И

если каждый игрок ставит здание самостоятельно - то наверное и лут в

нем ресает самостоятельно. Только лут - является глобальным.

Хотя проще говоря(из тестов той ветки):

 

 

A few problems with using createVehicleLocal for buildings and vehicles:

  • Damage, sounds, physics, etc. will not be synchronized. So the building may be destroyed on one client and standing on another.
  • Entering a vehicle created locally (such as bike) will not show for

    other clients. To them your player will be left standing where you got

    in the vehicle. They can shoot and kill your player where they see it

    standing. Then on your client you fall out of the vehicle and die. If

    you get out of the local vehicle somewhere else other clients will see

    your player teleport away from the get in position.

  • Loot is global, so if friends are looting together they see each

    other pick things up, etc. Every time a player relogs they will recreate

    these local buildings on their client and respawn loot globally. To

    prevent that exploit you would need to add some exception that checks if

    the building is local to the client. If it is then it needs to check if

    loot was spawned there recently and not respawn it.

 

И в догонку:

 

Local buildings > 2km away:

  • hideObject true: no difference, FPS identical before and after hiding
  • enableSimulation false: small but consistent FPS

    boost of 10-15% (2-3 FPS). I tested several times because the difference

    was so small. It is more significant with more objects. With 10k

    objects it was only ~8%, 30k objects ~11% and 15% with 80k objects.

  • deleteVehicle: significant boost of 15%+ (8-10 FPS) @ 10k objects

Global buildings > 2km away:

  • hideObject true: no difference
  • enableSimulation false: significant difference with 100k objects spawned on the server, client FPS jumped from 5 all the way to 51-52 after disabling simulation client side
  • deleteVehicle: did not test, assume FPS increase

Local AI:

  • hideObject true: no difference
  • enableSimulation false: big (9-10) FPS increase
  • deleteVehicle: obvious FPS increase

 

Global AI:

  • hideObject true: did not test, assume no difference
  • enableSimulation false: assume FPS increase, epoch traders already use it
  • deleteVehicle: assume FPS increase

 

Global drivable vehicles:

  • hideObject true: did not test, assume no difference
  • enableSimulation false: small boost 10-15%
  • deleteVehicle: assume FPS increase

 

Уже исходя из тестов можно вытащить очевидное

1. Замеры для HideObj не проводились толком. Т.к. не указана дистанция, кол-во объектов и дистанция скрытия.

2.

Отключение симуляции дает прирост, хотя опять автор не написал - каким

объектам он отключал симуляцию. - У бисов разрабы уже писали, что для

статики это не играет роли.

Судя по тому что прирост давало по тестам, - значит отключали на всем подряд в т.ч. и на ботах.

3. Удаление объектов дает прирост - это и ежу понятно, но в совокупности с косяками(при

быстром передвижении персонажа - вертолет например, воссоздание и

прорисовка будут эпично жрать клиентский проц идавить на память), нет

синхронизации - да тех самых открытия дверей и т.п. - один открыл у

другого закрыта. Про транспорт - этот скрипт можно и на транспорт

прицепить или ты не видел там AllVehicles в массиве?? Про лут уже писал.

И в той теме об этом так же написано. Как следствие - если у тебя на

сервере 100к объектов, и ты свалил все на клиентов, вместо чистки БД, то

наверное ты в какой то степени вернешь ФПС для ряда игроков которые

привыкли бегать пешком, которым плевать на синхронизацию и т.п. вещи.

 

Описывать данные минусы при создании тем - обязательно надо. А не просто ссылку на оригинал кидать.

Изменено пользователем NoNameUltima (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По мне так ни чего хорошего от этого скрипта не жди, я к тому, что хотите добиться этим модифицированием? Если повысить ФПС то вряд ли, над игроком и так есть купл который делает тоже самое только корректно. Может я дурак и не понял предназначения ну да ладно. Тем ни менее спасибо за старания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хотя проще говоря(из тестов той ветки):

 

Ты опустил самое главное. Если как ты говоришь, это ничего не дает:

 

 

Other stuff:
 
Global objects have a much more severe impact on client FPS than local objects. I was able to spawn up to 100K local objects before my FPS tanked to 13-15. With only 30k global objects spawned on the server my FPS was single digits (5-7).
AI are much worse than buildings. With only 2k local AI my FPS was already down to 13-15.
Server FPS is cut by 1/3 after spawning 4k global cars 45 --> 30
Server FPS is almost halved by spawning 30k global buildings 45 --> 25

Ссылка.

Я скажу что имел в виду автор: 100к локальных объектов = 13-15 fps, 30к глобальных объектов = 5-7 fps. Это о многом говорит. И никто не обязывает всенепременно поставить на сервер эти 100 тысяч объектов, разгружаешь с сервера 1500 объектов по клиентам, и то не разом, они будут им подгружаться по мере их приближения к этим объектам. Второе, при глобальных объектах клиенту грузится все, чего нельзя сказать о локальных. Каждый клиент подгружает столько объектов, сколько ему необходимо в данный момент в радиусе тех координат, где он находится. И также выгружается, когда необходимость в этих объектах отпадает. У меня прирост FPS с момента установки этого скрипта. За год ни один клиент не жаловался на понижение фпс, баги, лаги, фризы - все что может быть связано с объектами. Стабильность и быстродействие. 

 

Что касается техники. Да сколько можно повторять? Скажи, ты прописываешь в mission.sqf транспорт? Нет? Так причем здесь тогда транспорт! Ах да, AllVehicles! А что это такое? А давай посмотрим: https://community.bistudio.com/wiki/ArmA_2:_CfgVehicles. Ты хочешь чтобы вместо AllVehicles были перечислены все классы зданий? Куда проще указать супер-класс для всего. И указание супер-класса не руководство к действию - использовать CreateVehicleLocal для техники, мозг надо включать иногда. Кто будет это использовать для транспорта, покажи мне таких, посмеюсь.

 

И в вертолетах, да что там, самолетах - при максимальной скорости передвижения ни у кого проблем не возникало. Насчет базы данных не переживай, чистится с каждым рестартом и по расписанию необходимыми функциями. Скрипт обрабатывает свои 1500 динамических объектов, тест по 100к я тебе уже привел, для комфортной работы хватит и 10-15к, без ущерба серверу и клиентам. В перспективе есть запас производительности.

 

Описывать минусы надо, но не вводить в заблуждение. Каждый сам для себя решит. Поставит, посмотрит, оценит высокий fps, оставит. Не понравится чтото, в чем я лично сомневаюсь, уберет. Да и более того, никто не обязывает использовать исключительно этот метод, можно совмещать оба, локальные и глобальные. Смотря что и для чего ставить на карте.

 

Оптимизация делается только на статические объекты: архитектура, укрепления, торговые города - все что ты сделаешь в редакторе и захочешь вставить. 

Тебя никто не заставляет ставить это УГ. И я понимаю почему для тебя это УГ. Ты занимаешься оптимизацией серверов. Не бесплатно.

И если человек говорит что у него чтото украли, значит ему не плевать, как ты выразился. Иначе не написал бы, что эпочевцы твой формат украли.

 

Спорить можно долго и безрезультатно, я вижу ты упертый, последнее слово должно быть за тобой. Да как скажешь, можешь привести еще аргументы в пользу бесполезности этого скрипта, хорошо, так тому и быть. Спорить с тобой и доказывать что либо бесполезно, привел достаточно аргументов, уже повторять начал то что ты не хочешь замечать. На этом оффтоп можно закончить. Спасибо за дискуссию.

 

Всем хорошего FPS и настроения!

Изменено пользователем Ramond (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ЛяЭбу - футоболист такой.

30к объектов - это эпично перегруженная БД.

Если пол черно застроить, и у тебя на серваке 50 тел играют нон стоп - ну давай посчитаем -

База 200 объектов на норм серверах на 1 тело.

50*200=10к + ~1.5к статика такая как обломки, СЗ и т.п.

Да даже если все игроки как один построят себе по 2 базы не будет никаких 30к.

 

В реалиях в БД ~ 7-9к объектов при онлайне 20-30 считая технику!

 

И за счет чего вырос ФПС в городе? а?

Там объектов стало меньше? Так вроде скрипт спавнит равное кол-во объектов при заходе в зону.

 

Буферизация дальности уже есть в арме, если ты об этом не слышал - называется она - дальность обзора.

И если на сервере стоит 5к дальность - то конечно потом можно придумывать костыли и вводить свою дальность.

 

"И если человек говорит что у него чтото украли, значит ему не плевать, как ты выразился. Иначе не написал бы, что эпочевцы твой формат украли."

1. Я написал это в кавычках - понимаешь сарказм? см п.2

2. За 4 года они наконец додумались ввести вменяемый формат вместо портянок с объектами по 15к строк. Чему я даже рад.

 

И никакой претензии к скрипту у меня нет, да и ни у кого нет - но такие скрипты - мягко говоря херово оттестированные, и приносящие настолько сомнительную пользу, - необходимо оформлять корректно.

 

И то, что тут обсуждение идет - это хорошо и жЫрный плюс.

 

А если ты за поднятие ФПС - вот тебе скрипт, 100 летней давности, в который необходимо добавить отключение\включение симуляции для объектов.

Скрипт был еще года 2+++ назад написан, я лично забил исходя из того, что меньше 60фпс мало у кого на сервере.(сам скрипт ниже)

Да и БИСовцы отписали, что значения особого не прибавит еще аж в 2011г

Posted on 12 Nov, 2011
HomerJohnston
Contrary to Krause's suggestions above, using "this enableSimulation False" on static objects has no effect on a dedicated server's bandwidth usage or FPS (as per current 1.59 Release version).

 

Но тут оговорка - статик обжект, да и версия 1.59, а значит к АИ вполне применимо, да и на 1.63 мб что то поменялось.

Что касается скрытия объектов, - дает прирост, и зависит напрямую от дальности видимости.

 

Сам скрипт:

 

[] spawn
    {
        diag_log("[#Ultima]: Запуск скрипта скрытия, или отображения объектов...");
        uiSleep 90;    //    Ожидание пролага и стабилизации.
        diag_log("[#Ultima]: Скрипт скрытия, или отображения объектов запущен.");
        Private ["_refreshDistance", "_visualDistance", "_allObj", "_lastPos", "_mapCenter", "_mapRadius", "_objs", "_hide", "_visual"];
        //    Х метров - Расстояние обновления видимости объектов (Если игрок удалился от точки отсчета на X метров - обновить точку отсчета, и обновить видимость объектов)
        _refreshDistance = 200;
        //    Дальность прорисовки объектов от игрока за вычитанием _refreshDistance
        _visualDistance  = 800;
        //    Массив объектов которые можно и необходимо скрывать\отображать
        _allObj          =
            [
                "AllVehicles"
                ,"BuiltItems"
                ,"DZE_Base_Object"
                ,"DZE_Housebase"
                ,"House"
                ,"ModularItems"
            ];
        _lastPos   = [-1000, -1000, -1000];
        _mapCenter = getMarkerPos "center";
        _mapRadius = _mapCenter select 0;
        while {true} do
            {
                if ( (player distance _lastPos) > _refreshDistance ) then
                    {
                        _lastPos = getPos player;
                        //_hide    = 0;
                        //_visual  = 0;
                        _objs = nearestObjects [_mapCenter, _allObj, _mapRadius];
                        {
                            if ( (player distance _x) < _visualDistance ) then
                                {
                                    _x hideObject false;
                                    //_visual = _visual + 1;
                                }
                            else
                                {
                                    _x hideObject true;
                                    //_hide = _hide + 1;
                                };
                        } forEach _objs;
                        //diag_log(format["[#Ultima]: Скрыто за цикл: %1. Отображено за цикл: %2.", _hide, _visual]);
                    };
                if ( (vehicle player) == player ) then
                    {uiSleep 5;}
                else
                    {uiSleep 2;};
            };
    };


P.S. Оптимизацией не занимаюсь, ни платно ни бесплатно.

Изменено пользователем NoNameUltima (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И тем не менее ты добавил в свою сборку

 

Текущее обновление v.0.0.4.4   Добавлено Добавлен скрипт, скрытия, или отображения объектов в зависимости от дистанции до персонажа. Добавлен скрипт включающий, или отключающий симуляцию объектов, в зависимости от дистанции до персонажа. *Оба скрипта выше, вынесены в единый скрипт. В сборке по умолчанию отключены. Исправлено

 

Но не так давно утверждал что это лишнее, что клиентам от этого хуже.

Двойные стандарты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: BR0wi
      Подскажите где найти людей, которые делаю моды на заказ. К кому вообще обращаться? Или что бы реализовать свои идеи нужно самому "год" сидеть и изучать все механики модинга?
    • Автор: CubeIn
      Приветствую господа, хочу создать новый проект, уникальный, но для этого нужен маппер.
      Я оставлю здесь свой дискрод, напишите в лс, кто готов взяться за крупный проект.
      4me#4542
    • Автор: 6agu
      Поставил
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • Автор: 123new
      Много вопросов на данную тему наблюдаю от новичков, попробую прояснить немного сей вопрос.
       
      Предположим. что вы уже знаете на каких координатах вам надо спавнить определенное здание или объект\животное\бота, с каким углом поворота. И так. эта тема для вас.
       
      Сразу делаю пометку, метод, который добавили нам разработчики игры в патче 1.15, очень хорошо описал наш товарищ в сообщении форума:
      Рекоммендую вам использовать именно его!
      Ниже опубликованы старые методы.
       
      Если вы с расставили их с модифицированной версии Offline (Offline by Arksenor это называется), то вы получили и нашли код вида:
      GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13260.040039 0.0 3670.984131").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13262.756836 0.0 3645.180176").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13265.441406 0.0 3619.531982").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13268.124023 0.0 3593.995361").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13270.844727 0.0 3568.186523").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13273.514648 0.0 3542.561279").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13276.195313 0.0 3517.048828").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13278.399414 0.0 3496.097900").SetOrientation("-96.000000 0.000000 0.000000"); Здесь (по примеру первой строки) 1 значение в скобках - id постройки/объекта, 2 значение - координаты в формате X Y Z, разделенные пробелом, 3 - значение поворота примерно в том же формате.
      Как это делать в Offline - статья от автора Offine:
      https://github.com/Arkensor/DayZCommunityOfflineMode/wiki/Add-custom-objects-to-your-server-or-mission
       
      И так, инструкция:
      1. Добавляем в начало init.c файла в вашей mpmissions следующий код:
      #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\spawn_buildings.c" 2. Создаем в папке вашей активной mpmissions файлик spawn_buildings.c и заполняем его следующей информацией.
      void SpawnObject( string type, vector position, vector orientation ) { private string NameBlockLog = "[CreateObject] "; private string InfoLog = ""; if(type != "") { auto obj = GetGame().CreateObject( type, "0 0 0" ); if(obj) { if ((position[0] != 0) && (position[1] != 0) && (position[2] != 0)) { obj.SetPosition( position ); obj.SetOrientation( orientation ); obj.Update(); if (obj.CanAffectPathgraph()) { obj.SetAffectPathgraph(true, false); GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(GetGame().UpdatePathgraphRegionByObject, 100, false, obj); } InfoLog = "[Type: '" + obj.GetType() + "' Position: '" + obj.GetPosition().ToString() + "' Orientation: '" + obj.GetOrientation().ToString() + "']"; Write_Log(NameBlockLog + " Object has been created successfully! Info " + InfoLog); } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Incorrect writed position. Info " + InfoLog); } } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Info " + InfoLog); } } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Incorrect writed type. Info " + InfoLog); } } void Write_Log(string message) { Print(String(message)); } 3. Открываем созданный нами файл,  и в конце файла дописываем следующее:
      void SpawnAirfeeldBuildings() { SpawnObject( "Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750", "-96.000000 0.000000 0.000000"); } void SpawnKrasnoBuildings() { SpawnObject( "Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750", "-96.000000 0.000000 0.000000"); } Где после void - название функции идет, а между открытыми скобками вызов спавна самих зданий на указанных координатах.
      На примере 1 строки:
      Land_CementWorks_ExpeditionB - id постройки (type)
      13251.875000 0.0 3748.525879 - координаты в формате X Y Z
      -96.000000 0.000000 0.000000 - значение поворота в формате X Y Z
      Внимание: id постройки и координаты в примере указаны не верные и требуют подключения дополнительной модификации для корректной работы!!! Координаты не соответствуют названию функции!!!
      4. открываем в MpMissions в папке с вашей активной миссией init.c и перед ЗАКРЫВАЮЩЕЙ скобкой '}' дописываем нужную нам функцию (это будет активация спавна на карте):
      SpawnAirfeeldBuildings(); 5. Готово, Запускайте сервер, и в scripts.log вы увидите процедуру спавна ваших зданий и увидите, спавнятся ли они на карте или нет.
      Можно написать конечно и более готовую, универсальную систему спавна на карте со считыванием конфигурации из файла, но я считаю это лишним.
       
      Как заполнить добавленные здания лутом на карте:
      вариант 1:
      https://github.com/Arkensor/DayZCommunityOfflineMode/wiki/Enable-loot-for-custom-placed-objects
      вариант 2: вручную заполнить xml-файл  mapgrouppos.xml в mpmssions данными о местоположении зданий, где rpy - значение поворота здания в формате Z Y X
       
      С помощью данной статьи вы можете разместить любой элемент игры(постройку, животное, зомби, бота), доступный к спавну через любую модификацию-админ. панель. Очень полезный мод в этом смысле BuilderItems, с его помощью можно творить поистину интересные локации!
    • Автор: Venom21
      Появилась такая проблема, нужно закрыть некоторые слоты под одежду, когда на определённый слот одет предмет…
      пример: возьмём экзоскелет от Фидова, там есть две версии которая одеваеться как на тело и ноги, и есть которая одеваться на разгрузку и пояс, так вот, нужно например чтобы при одетом экзаче на тело и ноги слоты под пояс и разгрузку блокировались, либо только под определенные предметы, если есть интерес то цену можем в личке обсудить…
      P.S. Разрешение от Фидова на переделку и переупаковку есть)
  • Наш выбор

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.