Приветик анончики! Задумал покириллить создать игру. Суть такова - графика как в among ass экономика как в eve online/ то есть онлайн игра с экономикой войнами политикой и т д. Я задумался как сделать сервер для такой игры, чтобы он выдерживал тысячи игроков в одном месте. И вот что получилось, огромное квадродерево на всю карту. За каждый квадратик отвечает один сервер обрабатывающий все что внутри него. Чем больше игроков собралось в одном месте, тем больше там будет разбиение и тем больше будет серверных мощностей в том месте. В игре планируется убийства (из различного оружия) тут нужно продумать как игрок стоящий в одном квадранте будет стрелять в игрока в другом и как все это будет работать. Также планируется транспорт (тут я не знаю, возможно ли такое вообще)
От гуру мультиплеерных игр хотелось бы услышать как вообще такие штуки делать (и делаются ли они таким образом?) насколько я знаю в rust есть очень мощные библиотеки по работе с ECS системами тот же SPECS (вроде аналогичная штука есть и у c++)
узким ядром я вижу компонент, который будет как-то вычислять компоненты с квадрата и направлять их в нужный сервер. Сама идея на мой взгляд неплохая, но программная архитектура такой штуки у меня еще не сложилась в голове.
>>704097 лично мне проще ее рисовать, супер крутую графику и 3ДЭ модели я не потяну. А тут просто, в целом приятно. Далее, все эти космо штучки, конечно, очень интересно, но слишком сложно вкатиться с нуля (как минимум придеться выучить отдельный суржик для этого) Я планировал сделать игру в сеттинге постапокалипсиса (ржавые банки, старые книги, которые нужно искать ради рецептов и навыков)
>>704094 >узким ядром я вижу компонент, который будет как-то вычислять компоненты с квадрата и направлять их в нужный сервер.
Узкое место будет - это тысячи человек в одном месте в пределах видимости. Вот там заебёшься их обновления рассылать. А нарезать пространство можно как угодно. И с акторами даже проще будет, чем колхозить что-то своё.
>>704156 Не совсем понял про в пределах видимости и рассылать обновления. Каждое обновление будет послано своему квадрату. Даже если игроки стоят рядом они могут стоять в разных квадрантах >>704182 Заметно лагает при заходе в города (где 300 человек)
>>704214 Ну начни с координат и чанков. Возьми unit { id: uuid, x:float, y:float, inChunk: uuid (или ссылку, как хочешь) }, chunk { id: uuid, parent: chunk*, inner: Vector<chunk> } Если в чанке units.count > maxUnitsOnChunk -> разделяй его в inner-ах и обновляй inChunk у всех юнитов внутри них на другие. Юнитов кстати можно тоже в чанках хранить или в хеш-таблице. Просто начни пилить и поймешь как лучше.
>>704219 да, сенкс, ты описал схему при которой у нас есть просто одна карта с квадродеревом и один сервер, но типо каждый чанк это один сервер (процесс на ядро) в любом случае надо начинать пилить. >>704223 почему это будет лагать? смотри мы делим квадродерево если в чанке игроков больше чем какая константа, допустим 32. получается кроме своих 32 игроков, чанку нужно просто отрисовать 32*8 игроков котоыре находятся вокруг, не думаю, что это такая непосильная задача. Ведь мы не обсчитываем их физику, мы просто отрисовываем спрайтики. Типо, давно, нарисовать 256 динамических спрайтов стало проблемой?
Потому что проблема не отрисовке, а в пересчёте перемещений и передаче данных всем 256 клиентам с нормальным временем отклика. Поэтому ева и включает сло-мо на больших толпах.
>>704231 серверы общаются между собой. Сервер1 говорит Серверу2 - чувак с id = 10 выстрелил по такой то траектории Сервер2 о спасибо друг начинаю отрисовку и просчет траектории
То есть сервер не посылает всем игрокам вокруг информацию, только своим 32, но серверы соседи постоянно рядом
>>705047 к сожалению это готовое решение стоит дохуя денег
Только, что посомтреть документацию и там РОВНО ТО ЧТО Я ПИСАЛ
мир разделен на шарды и каждый юнит видит все что вокруг него.
Анон который писал про расчет перемещений приглашается в тред, пока я не очень понял как они тут решили эту проблему
Но с виду все пока ровно так как я думал. вот срань снова все идеи в мире уже имеют какое-то вополощение правда у меня квадродерево будет, вроде должно быть чуть более быстрее чем просто разделение grid
>>704156 >Узкое место будет - это тысячи человек в одном месте в пределах видимости В 2D это очень легко решить. Сделать игроков непрозрачными друг для друга, чтобы нельзя было одновременно в одном месте стоять. Тогда на одном экране будет умещаться ровно столько игроков, сколько спрайтов можно уместить на экране, если спрайты большие - то игроков на экране всегда мало. Кроме того, я не вижу ни одной причины, чтобы тысяча игроков собиралась в одном и том же месте - это просто неразумное скопление, не имеющее под собой никакой цели, кроме как пофлудить в чятик (ева отдельная история, мы ведь рассматриваем 2D-игру).
>>708050 огромная битва. В одном месте имелось в виду в пределах выстрела пушки. идея про непрозрачность отличная (я изначально такими и предполагал, а кто то делает спрайты прозрачными?)
весь вопрос в том чтобы все работало быстро и надежно.
>>708202 Я считаю, что это будет интересно и как раз именно из за огромного населенного мира. знаешь как сделать? расскажи больше. За ссылку спасибо буду изучать архитектуру.
моя цель создать именно бесшовный огромный мир для тысяч игроков одновременно.
Кстати говоря, я тут написал на gamedev stackexchange и получил ответ (теперь думаю над ним)
>>704092 (OP) > Писать планирую либо на c++ либо на rust Не надо, ты обосрешься. Возьми robust toolbox, написанный под SS14 и допиливай под свои нужды.
Писать планирую либо на c++ либо на rust