0 / 0 / 0
Регистрация: 13.04.2019
Сообщений: 6
1

Логика игрового сервера

12.07.2019, 22:10. Показов 1759. Ответов 7

Всем доброго времени суток.
Переписываю ( для обучения ) простенький сервер.
Допустим есть БД, там указано значение Атаки моего персонажа и его здоровье.
Соответственно что бы вся логика удара вычислялась на сервере, клиент должен только отослать "желание" ударить, а сколько урона нанесется, вычисляется на сервере.
Сижу думаю какой должен быть верный алгоритм ?
Client коннектится к серверу / На сервере создается объект User поля которого ( attack,defence итд) соответствуют значениям этого usera из бд. Далее клиент отправляет желание ударить, у User'а на сервере есть метод Атака и после атаки сервер шлет результат клиенту ?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2019, 22:10
Ответы с готовыми решениями:

Программирование игрового сервера
Доброго всем времени суток! Ведётся разработка многопользовательской игры для которой необходимо...

Статус игрового сервера
Еще раз всем привет :). Такой вопрос нагрянул... Как через C# получить статус игрового сервера,...

Получения данных с игрового сервера
Здравствуйте, мне интересно могу ли я получать данные о Игровом сервере (количество игроков,...

Мониторинг игрового сервера
Здравствуйте, друзья. Столкнулся вот с какой проблемой. Хочу сделать мониторинг сервера. Нашел в...

7
1053 / 786 / 251
Регистрация: 30.04.2009
Сообщений: 3,240
13.07.2019, 09:41 2
t3os djavelin, да. но можно еще дублировать логику на клиенте, чтобы не было лагов.
0
1459 / 859 / 317
Регистрация: 17.05.2015
Сообщений: 3,309
13.07.2019, 10:34 3
Цитата Сообщение от nicolas2008 Посмотреть сообщение
дублировать логику на клиенте
зачем тогда сервер будет вычислять то же самое, когда клиент посчитает быстрее?
А если результаты сервера и клиента не совпадут?
А если на серваке сработает шанс крит удара, а на клиенте нет?
0
918 / 553 / 194
Регистрация: 08.08.2014
Сообщений: 1,742
13.07.2019, 10:55 4
Игровой сервер - это полностью самодостаточная реализация всей логики игрового мира, который работает даже если вообще ни один клиент не подключен, но который может отсылать данные клиентам и получать от них какие-то команды. На клиенте же, дублируется часть состояния сервера (игровой мир в радиусе видимости), которое обновляется на основании данных, получаемых с сервера и на основании которого уже отрисовывается UI.

* если дублировать часть логики на клиенте, то будут баги, например, как система перемещений в старых версиях Lineage2 (как сейчас, не знаю, может пофиксили), где сервак отдаёт на клиент стартовую точку НПЦ/персонажа, целевую точку для перемещения (в т.ч. на большом расстоянии), а далее клиент, на основании кучи параметров объекта и своих представлений о геодате сам пытается вычислить скорость/траекторию и отрисовать движение. И иногда (весьма часто) эти вычисления, в силу разных причин, не совпадают с серверными и тогда в UI либо движение объекта становится скачкообразным, либо объект вообще оказывается не в той точке, либо сквозь текстуру проходит/проваливается.
0
1053 / 786 / 251
Регистрация: 30.04.2009
Сообщений: 3,240
13.07.2019, 11:46 5
Рядовой, все расчеты должны быть на сервере, в первую очередь чтобы избежать читинга.
Клиент повторяет вычисления, чтобы избежать лагов, которые обязательно будут если всегда дожидаться ответа сервера.
Что делать со "случайными" событиями хз, наверное такие действия вычислять только на сервере.

Добавлено через 8 минут
kotelok,в WoT плавные движения даже если ping 100+ ms, т.е. на клиенте делается экстраполяция движений, как минимум на секунду.
1
918 / 553 / 194
Регистрация: 08.08.2014
Сообщений: 1,742
13.07.2019, 11:48 6
nicolas2008
Наверное, именно для передвижений это и в самом деле имеет смысл. Вопрос лишь, насколько грамотно оно реализовано.
0
1053 / 786 / 251
Регистрация: 30.04.2009
Сообщений: 3,240
13.07.2019, 11:51 7
kotelok, имеет смысл для всего, что можно посчитать с большой долей вероятности.
1
0 / 0 / 0
Регистрация: 13.04.2019
Сообщений: 6
13.07.2019, 11:54  [ТС] 8
В моем случае с координатами итд, все намного проще - никто не двигается, т.е. к примеру аватарка монстра, кликаем на нее, у монстра уходит HP и одновременно получаем урон от монстра, т.е. важность пинга очень мала.
Как я понимаю в моем случае алгоритм такой.
Коннектимся клиентом / На сервере ( выделяется асинхронно поток из пула ( у меня 5 потоков в пуле )) создающий объект игрока с данными из бд / убили монстра получили новый уровень - любые изменения сразу пишутся в БД / дисконнектимся - на сервере объект User летит в мусорку.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2019, 11:54
Помогаю со студенческими работами здесь

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

Опрос игрового сервера
Доброго времени суток всем )) Подскажите как опросить сервер Quake 3 т.е послать серверу команду...

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

Статус игрового сервера
Хочу получить статус сервера, использую этот код: $ip = 'тут ип'; $port = 'тут порт'; echo...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru