Новый спавн лута!

Наконец! мы закончили новую систему спавна в dayz sib! ура! всего то на неё потратили 3 недели ?
Пришлось ради 1 функции изобрести еще 20. вряд ли будет кому интересно(значит для продвижения сайта пойдет) но расскажу какого лешего 3 недели мы делали... (в кратце)
1. Нужно было получить все здания на карте dayz, но как мы получаем сейчас система не подойдет так как выполняется она долго и не совсем правильно, грубо говоря она переберет каждый см карты и добавляет все здания в базу(массив). Мы получили эти данные из ядра игры в момент когда карта загружается на сервер! тут как бы ура? и все готово... но нет...
2. Появилась проблема "бездны" "если ты смотришь в бездну, бездна смотрит на тебя", у нас так и вышло когда ты получаешь здание в дейзи и чтоб найти внутри него маленькие точки(поинты и прокси) на которые и нужно спавнить лут, по этому лут появляется на кроватях, на полках и тд.) когда мы загружаем эти точки и смотрим на них, сервер потреет колоссальное количество памяти и не освобождает память после просмотра... в итоге после спавна у нас куча занятой памяти...
3. Решение! а давайте запишем все точки в файл(бин файл) и во время спавна не будем запрашивать здание, а запросим этот файл уже с координатами!
4. Готово! только вот файл весит 350 мег... и это в нем около миллиона координат, так как в 1 здании бывает до 1000 точек, а зданий на сервере около 30 000...
5. Немного шаманства в коде dayz и кучу найденных баг в точках, мы превратили 350 мег в 200 мег... но этого все равно много... 200 мег в бин файле это 2гига в памяти... а сервер 32 битный дейзи же... и ему не хватает памяти....
6. Решение! разделить файл на 10 частей и получать данные по очереди! и Эврика! мы получили данные у которых нет проблем с освобождением памяти и после спавна нет лишней занятой памяти, сервер начинает работать быстрее! а спавн лута из файла быстрее чем перебор всех зданий!
Комментарии
Dayz SIB © 2013 - 2018