LekstoR

Как добавлять объекты на карту с минимальной нагрузкой и не увеличивать файл миссии

35 сообщений в этой теме

В общем посмотрел раздел "Дополнительные карты, объекты" и был немного в шоке, вы все добавляете здания через файл миссии - всвязи с чем файл миссии неплохо увеличивается, у игрока просаживается фпс при прогрузке добавленных объектов.

Хотел бы вам предложить более оптимизированный вариант:

 

Заменяем в скрипте начало всех объектов с _vehicle_  на _bldObj  должно выглядеть так

 

 

_bldObj = objNull;
if (true) then
{
_bldObj = createVehicle ["Land_HBarrier_large", [6305.459, 7854.8101], [], 0, "CAN_COLLIDE"];
_bldObj setDir 36.99;
_bldObj setPosASL [6305.459, 7854.8101, 305.4];
};

 

После чего распаковываем dayz_server.pbo и создаем там папку Maps, в которую переносим файл с добавленными зданиями. 

Теперь заходим в \@DayZ_Epoch_Server\addons\dayz_server\init\server_function.sqf и добавляем в самый конец

 

execVM "\z\addons\dayz_server\Maps\название вашего файла.sqf";

 

и вуаля - все добавленные объекты как родные. 

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


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

Overhosting - хостинг игровых серверов


В арме, вообще много чего можно на сервер перенести. Не только объекты, но и расчеты, броадкаст и т.п.

Как пример - посмотри, что происходит при "закапывании трупа".

- На стороне клиента

1. Происходит поиск игроков в радиусе 100м.

2. Затем в ЦИКЛЕ осуществляется рассылка на сервер(при чем по 1 сообщению, для каждого найденного юзера в радиусе 100м - т.е. нашел 20 игроков вокруг себя, - 20 пакетов послал на сервер).

*Что то вроде - "Я, хочу зарыть труп X, сообщи об этом игроку Y. И так 20 раз...(сколько нашел игроков).

 

- На стороне сервера

1. Разбор пакета - устанавливаем, что клиент просит передать игроку Y об исчезновении объекта X

2. Отсылка клиенту(Y), что объект (X) исчез.

 

Идиотизм чистейший.

Принципиально, клиент  вообще не должен давать указаний серверу, а только спрашивать - можно или низя.

т.е. - упрощенный вариант, - посылать хотя бы массив типа - "Я, хочу зарыть труп X, сообщи об этом игрокам Y1,Y2,Y3...." т.е. одним сообщением.

 

Идеальный вариант -

Клиент -

Шлет сообщение, с запросом на разрешение зарыть труп Х И ВСЕ! - ОДНО сообщение!

 

Сервер -

1. Проверяет - есть ли такое тело и дохлое ли оно(мб клиент гонит\читит и т.п.)

2. Если есть - именно сервер ищет всех игроков в радиусе запрашивающего.

3. В Цикле начинает рассылку найденным с сообщением об исчезновении объекта X

4. Удаляет объект.

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


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

Спасибо :thumbsup:  Это действительно на много лучше, чем вариант с запихиванием всего в миссию

А можно каким то образом загрузочный экран так же впихнуть? да и другие скрипты не мешало бы.

К примеру у меня стоит сектор ФНГ и к нему в инит у меня такие команды:

[] execVM "Scripts\sectorfng\sectorfng_init.sqf";
[] execVM "Scripts\Init_UPSMON.sqf";
[] execVM "Scripts\SHK_pos\shk_pos_init.sqf";
[] execVM "Scripts\SARGE\SAR_AI_init.sqf";

Как такое же сделать только в серверпбо?

 

Ага еще кое что

Там идет порядок

_vehicle_26

_vehicle_27

и т.д. Надо ли дописывать "_26" "_27" к "_bldObj"?

Изменено пользователем voks32

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


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

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

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


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

У меня вообще все строения и включая сектор Зла, перенесён в сервер и не чё фпс 70|80

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


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

Только единственное но, ящики с сектора пропадают через час роботы сервера

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


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

У меня вообще все строения и включая сектор Зла, перенесён в сервер и не чё фпс 70|80

если ты имеешь ввиду server.pbo то расскажи пожалуйста каким образом ты их подключил там?

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


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

Спасибо :thumbsup:  Это действительно на много лучше, чем вариант с запихиванием всего в миссию

А можно каким то образом загрузочный экран так же впихнуть? да и другие скрипты не мешало бы.

К примеру у меня стоит сектор ФНГ и к нему в инит у меня такие команды:

[] execVM "Scripts\sectorfng\sectorfng_init.sqf";

[] execVM "Scripts\Init_UPSMON.sqf";

[] execVM "Scripts\SHK_pos\shk_pos_init.sqf";

[] execVM "Scripts\SARGE\SAR_AI_init.sqf";

Как такое же сделать только в серверпбо?

 

Ага еще кое что

Там идет порядок

_vehicle_26

_vehicle_27

и т.д. Надо ли дописывать "_26" "_27" к "_bldObj"?

Не надо, протестировал. Если _bldObj_26 и т.д объектов не будет

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


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

Со строениями то всё просто, но как запихать на сервер скрипты активируемые игроком через fn_selfactions.sqf (типа перелив крови и т.п.)? Сколько не пытался ни фига не работает!

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


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

Со строениями то всё просто, но как запихать на сервер скрипты активируемые игроком через fn_selfactions.sqf (типа перелив крови и т.п.)? Сколько не пытался ни фига не работает!

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

Сервер при получении сообщения, будет разрешать или запрещать(ничего не делать\заносить в список читеров\..еще что то), данное событие.

В целом на серверной стороне надо переделать файл ServerToClient, а на стороне клиента переписать скрипты(типа переливки крови).

Если добавляются свои события, то надо будет их добавить в BattlEye.

Хотя, если переделывать все, то большинство функций БЕ попросту будут не нужны.

 

Посмотри выше мой пост #2, посмотри файлы на стороне клиента и сервера. Удивишься идиотизму построения.

 

Там много работы... Технически надо вообще удалять большинство клиентских функций, например лечение бинтом со стороны клиента и т.п.

Еще раз - Клиент должен только отправлять запрос на сервер(в примере с бинтом - "хочу юзануть бинт", - а уже сервер, должен посмотреть - есть ли бинт в инвентаре у игрока, если да - удалить бинт, остановить кровотечение и послать клиенту пакет, приняв который ,клиент всего лишь юзанет - BIS. Дабы отобразить остановку кровотечения.

Но скорее всего, еще придется удалять бинт, из ОТОБРАЖАЕМОГО инвентаря персонажа. Так арма устроена, к сожалению, что клиенту позволено почти все. А сервер, как бэ на вторых ролях - принеси\подай.

Но это все сторона безопасности, в т.ч. и от читов, если она мало волнует, то можно не замарачиваться.

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


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

О как завернул :biggrin:  Но нам бы чет попроще, на пример кинуть туда и вписать это сюда :D Ну или хотя бы один пример любого скрипта, обычно добавляемого в миссию

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


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

 

У меня вообще все строения и включая сектор Зла, перенесён в сервер и не чё фпс 70|80

если ты имеешь ввиду server.pbo то расскажи пожалуйста каким образом ты их подключил там?

Берёш всё что у тебя есть постройки в миссии переносиш в папку сервера 

и потом подключаешь их в init.sqf таким макаром

 

 

 

 

у меня в инете выглядит так

 

сразу после 

"filmic" setToneMappingParams [0.153, 0.357, 0.231, 0.1573, 0.011, 3.750, 6, 4]; setToneMapping "Filmic";

 

if (isServer) then {
  call compile preprocessFileLineNumbers "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\dynamic_vehicle.sqf";
  //Add Radioktive Base
  _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\custombase.sqf";
  //Add Load Admin Base
  _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\adminbase.sqf";
  //Add Otmel Building
  _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\buildbase.sqf";
  //Add Trader Citys
  _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\sektorzla.sqf";
  //Add Trader Citys
  _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\mission.sqf";
  //Server Monitor
  _serverMonitor = [] execVM "\z\addons\dayz_code\system\server_monitor.sqf";
};
 
И всё работает на ура 70/80 fps
Как то так только есть 1 проблем ящики с сектора через некоторое время исчезают!
Если кто знает как поправить подскажите?
 

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


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

 

 

У меня вообще все строения и включая сектор Зла, перенесён в сервер и не чё фпс 70|80

если ты имеешь ввиду server.pbo то расскажи пожалуйста каким образом ты их подключил там?

Берёш всё что у тебя есть постройки в миссии переносиш в папку сервера 

и потом подключаешь их в init.sqf таким макаром

 

 

 

 

у меня в инете выглядит так

 

сразу после 

"filmic" setToneMappingParams [0.153, 0.357, 0.231, 0.1573, 0.011, 3.750, 6, 4]; setToneMapping "Filmic";

 

if (isServer) then {
  call compile preprocessFileLineNumbers "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\dynamic_vehicle.sqf";
  //Add Radioktive Base
  _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\custombase.sqf";
  //Add Load Admin Base
  _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\adminbase.sqf";
  //Add Otmel Building
  _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\buildbase.sqf";

  //Add Trader Citys
  _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\sektorzla.sqf";
  //Add Trader Citys
  _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\mission.sqf";
  //Server Monitor
  _serverMonitor = [] execVM "\z\addons\dayz_code\system\server_monitor.sqf";
};
 
И всё работает на ура 70/80 fps
Как то так только есть 1 проблем ящики с сектора через некоторое время исчезают!
Если кто знает как поправить подскажите?
 

Ну такого фпс у меня нет даже на голом сервере :biggrin:  это ж еще и от машины зависит

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


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

Вы там не белены обожрались случаем? Какие могут быть прибавки или просадки ФПС, за счет переноса в другое pbo ?

У вас в скриптах загрузки построек должно стоять -

 

if (isServer) then {

..........

};

 

Все что между этих строк, выполняется на стороне сервера.

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


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

Вы там не белены обожрались случаем? Какие могут быть прибавки или просадки ФПС, за счет переноса в другое pbo ?

У вас в скриптах загрузки построек должно стоять -

 

if (isServer) then {

..........

};

 

Все что между этих строк, выполняется на стороне сервера.

Да это уже все давно знают, ты лучше подскажи пожалуйста как остальные скрипты все вынести в сервер с миссии (не здания)

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


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

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

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

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

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


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

Войти

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


Войти сейчас