Понедельник, 11 Ноября 2024, 09:42

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
GM MMORPG Client + Server Delphi
lumennesДата: Суббота, 12 Февраля 2011, 02:59 | Сообщение # 1
Убийца Diablo
Сейчас нет на сайте
Так как мне не давала покоя мысль о написании сервера на Delphi, мне все же удалось сделать пример 2D MMORPG (спасибо Филу и Винченсо).

В общем выкладываю пример 2D MMORPG на Game Maker с сервером на Delphi. Думаю разобраться не составит труда, тем более комментов много.

Новая версия движка, клиент на GM, сервер на Delphi:
GM MMORPG Client + Server Delphi

Старая версия движка, сервер и клиент на Game Maker:
GM MMORPG Mini Example


Как мало вы знаете, как громко вы судите...

Сообщение отредактировал lumennes - Суббота, 12 Февраля 2011, 23:43
NeZnayuДата: Суббота, 12 Февраля 2011, 07:23 | Сообщение # 2
__танцуй!__
Сейчас нет на сайте
Quote (lumennes)
Почему отправка и прием данных с сервера Delphi так сильно опаздывает?

Тестировал на разных компах?


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
mitchДата: Суббота, 12 Февраля 2011, 09:59 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
lumennes, какой смысл клиента на ГМ, а сервера на Дельфи?
я так понимаю у тебя клиент просчитывает координаты игрока и т.д.?
TimKruzДата: Суббота, 12 Февраля 2011, 10:48 | Сообщение # 4
старожил
Сейчас нет на сайте
lumennes, честно говоря, старую версию я не смог скомпилировать (не хватает какой-то библиотеки), а в "новой" не понятно, что и как происходит. Запускаю сервер, порт 7777, он слушает типа, запускаю клиент - "id -1", и всё. Ни клиент, ни сервер ни чего не говорят. И как, скажи пожалста, я должен понять, что всё работает? И как это работает.
Quote (lumennes)
Почему отправка и прием данных с сервера Delphi так сильно опаздывает?

А ты какие компоненты для отправки используешь? Или что-то низкоуровневое? Если сервер и клиент на одном компе, то пинг обычно бывает 3~5 миллисекунд. Но это смотря, какая у тебя скорость интернета и насколько мощный компьютер.
P.S. На какой порт отсылает инфу клиент? И почему клиент не предлагает ввести IP сервера для подключения? Не понятно.


RikettaДата: Суббота, 12 Февраля 2011, 10:54 | Сообщение # 5
Strategist
Сейчас нет на сайте
mitch, дельфи мощнее, быстрее, стабильнее, а GM слаб и медленен.
Только ребенок в детском саду об этом не знает.


Fougerite - Rust Server OpenSource API
TerraDev - Terraria OpenSource Hack
TimKruzДата: Суббота, 12 Февраля 2011, 11:00 | Сообщение # 6
старожил
Сейчас нет на сайте
lumennes, исходники ты какие-то странные засунул. Delphi 2007 выдаёт ошибку, типа чего-то там у него нет, поэтому он не может открыть проект; Delphi 7 выдаёт два несоответствия типов:

Короче, либо ты не те исходники скинул, либо у меня неподходящая версия Delphi. Скорее всего, у тебя что-то экзотическое, вместо обычной Delphi, т.к. у меня всё работает нормально.




Сообщение отредактировал TimKruz - Суббота, 12 Февраля 2011, 11:00
NeZnayuДата: Суббота, 12 Февраля 2011, 11:03 | Сообщение # 7
__танцуй!__
Сейчас нет на сайте
Что сервер то вообще делает? Просто голые данные отправляет?

CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
TimKruzДата: Суббота, 12 Февраля 2011, 11:09 | Сообщение # 8
старожил
Сейчас нет на сайте
mitch, Riketta, приколите, GM как раз написан на Delphi! Но, скорее всего, ради упрощения разработки, у GM возможности слабые, т.к. разработчики вряд ли рассчитывали, что на их майкере будут делать ММОРПГ. biggrin Ясен пень, для крупных проектов нужно использовать непосредственно Delphi, а GM максимум сойдёт для простеньких игрушек.

Добавлено (12.02.2011, 11:09)
---------------------------------------------
lumennes, да, кстати: сервер должен выводить на консоль (ещё желательно, чтобы писал лог в файл) всё, что делает, иначе контролировать его очень сложно. Ну, например:



mitchДата: Суббота, 12 Февраля 2011, 11:17 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
Riketta, думаешь я настолько туп, что не разбираюсь в этом?
вообще-то клиент нормальной сетевой игры должен только отправлять запросы, а сервер обрабатывать и отсылать результат, например нажал кнопку "вперед", отправил соответствующий запрос на сервер, он там проверяет, может ли игрок переместиться вперед, и отправляет соответствующий результат
VinchensooДата: Суббота, 12 Февраля 2011, 11:23 | Сообщение # 10
Злобный социопат с комплексом Бога
Сейчас нет на сайте
Quote (mitch)
Riketta, думаешь я настолько туп, что не разбираюсь в этом? вообще-то клиент нормальной сетевой игры должен только отправлять запросы, а сервер обрабатывать и отсылать результат, например нажал кнопку "вперед", отправил соответствующий запрос на сервер, он там проверяет, может ли игрок переместиться вперед, и отправляет соответствующий результат

А что, клиент на гм этого делать не может?
Ты задал тупой вопрос, получил ответ КЭПа, что тебя не устраивает?
Ты ж не спросил, как работает данный клиент, ты опять начал разводить холивар про гм + яп.
Quote (TimKruz)
mitch, Riketta, приколите, GM как раз написан на Delphi! Но, скорее всего, ради упрощения разработки, у GM возможности слабые, т.к. разработчики вряд ли рассчитывали, что на их майкере будут делать ММОРПГ. Ясен пень, для крупных проектов нужно использовать непосредственно Delphi, а GM максимум сойдёт для простеньких игрушек.

Никогда не слышал, думал, что на С++.
Да и по ответу, мне кажется, что ты не очень владеешь материалом =)
Отсутсвие быдлокода в клиенте, эффективные алгоритмы, оптимизация позволяют делать клиент на гм для ммо среднего размера.
Другой вопрос, что такой оптимизацией/алгоритмами на форуме могут и будут(а не тупо забьют, аля и так пойдет) заниматься максимум 10 человек.
Quote (TimKruz)
---------------------------------------------lumennes, да, кстати: сервер должен выводить на консоль (ещё желательно, чтобы писал лог в файл) всё, что делает, иначе контролировать его очень сложно. Ну, например:

Просто в лог, в консоли читать будет неудобно.
Quote (TimKruz)
А ты какие компоненты для отправки используешь? Или что-то низкоуровневое? Если сервер и клиент на одном компе, то пинг обычно бывает 3~5 миллисекунд. Но это смотря, какая у тебя скорость интернета и насколько мощный компьютер. P.S. На какой порт отсылает инфу клиент? И почему клиент не предлагает ввести IP сервера для подключения? Не понятно.

Судя по благодарности мне любимому, он использует не компоненты, а 39dll. Я тоже за нее, ибо шустрая и нет смысла убивать мозг чистыми сокетами.
Quote (NeZnayu)
Что сервер то вообще делает? Просто голые данные отправляет?

В идеале да, но тут, по-моему, что-то явно не то.
Качать лень, может вечером


mitchДата: Суббота, 12 Февраля 2011, 11:26 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
Vinchensoo, я имею ввиду что у lumennes все обрабатывается на клиенте, который сделан на ГМ
я не говорю, что гм + яп это плохо, просто если делать мморпг, то сервер нужно делать на том, на чем бы ты делал клиент(имхо)


Сообщение отредактировал mitch - Суббота, 12 Февраля 2011, 11:34
NeZnayuДата: Суббота, 12 Февраля 2011, 12:03 | Сообщение # 12
__танцуй!__
Сейчас нет на сайте
На самом деле клиент должен только передавать исходные данные ТОЛЬКО самого игрока.
Затем сервер все сам обрабатывает, просчитывает пути, считает повреждения, управляет чатом, короче делает всю грязную работу (и только в таком случае имеет смысл делать сервер не на гм, т.к. яп по понятным причинам обработает все это безобразие гораздо быстрее)

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

Вот в чем вся идея сервера на ЯП - взять на себя все ресурсоемкие процессы, чтобы как можно меньше расчетов производил ГМшный клиент.

Кто-нибудь слышал о проекте WonderLust? У них сервер написан на Си, я около года назад участвовал в тестах, держали около 70-90 человек, не могу сказать что все было гладко, но разница на лицо.

lumennes, короче ждем твоих объяснений wink


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу


Сообщение отредактировал NeZnayu - Суббота, 12 Февраля 2011, 12:04
AngevengelistДата: Суббота, 12 Февраля 2011, 12:14 | Сообщение # 13
постоянный участник
Сейчас нет на сайте
Мне интересно, а что собственно в клиенте. У меня это пустое окно, если открою 10-20 клиентов у всех id -1.

Добавлено (12.02.2011, 12:14)
---------------------------------------------
Посмотрел немного код, сложилось такое чувство, что сервер писался немного аля "тяп-ляп", попробую немого модифицировать, если lumennes, не будет против. Уж очень меня раздражают некоторые моменты в коде.

TimKruzДата: Суббота, 12 Февраля 2011, 12:37 | Сообщение # 14
старожил
Сейчас нет на сайте
Quote (Vinchensoo)
Никогда не слышал, думал, что на С++.

Вроде бы обещают написать GameMaker 9 на C#, но все предыдущие (1-8) написаны на Delphi.
Quote (NeZnayu)
На самом деле клиент должен только передавать исходные данные ТОЛЬКО самого игрока.
Затем сервер все сам обрабатывает, просчитывает пути, считает повреждения, управляет чатом, короче делает всю грязную работу (и только в таком случае имеет смысл делать сервер не на гм, т.к. яп по понятным причинам обработает все это безобразие гораздо быстрее)
После обработки сервер отправит всем клиентам готовые данные, которые они просто примут и "отрисуют" уровень.

Не всегда так. Бывает, что сервер только обеспечивает связь между клиентами. Вообще-то есть уйма методов связи клиентов... Всё зависит от того, что вы хотите получить: минимальную нагрузку на клиенты или на сервер, лучшую синхронизацию или наибольшую скорость.

Добавлено (12.02.2011, 12:37)
---------------------------------------------

Quote (Angevengelist)
Посмотрел немного код

У тебя какой Delphi? У меня 2007 не открывает, а 7 выдаёт несоответствие типов.


VinchensooДата: Суббота, 12 Февраля 2011, 12:43 | Сообщение # 15
Злобный социопат с комплексом Бога
Сейчас нет на сайте
Quote (mitch)
я не говорю, что гм + яп это плохо, просто если делать мморпг, то сервер нужно делать на том, на чем бы ты делал клиент(имхо)

А если сервер на дельфи, а клиент на С++)
По-моему, твое мнение ошибочно)
Quote (TimKruz)
Не всегда так. Бывает, что сервер только обеспечивает связь между клиентами. Вообще-то есть уйма методов связи клиентов... Всё зависит от того, что вы хотите получить: минимальную нагрузку на клиенты или на сервер, лучшую синхронизацию или наибольшую скорость.

В ММО все должно быть именно так)
Остальные способы больше пригодны для мультиплеера.
Quote (NeZnayu)
Кто-нибудь слышал о проекте WonderLust? У них сервер написан на Си, я около года назад участвовал в тестах, держали около 70-90 человек, не могу сказать что все было гладко, но разница на лицо.

Как-то сильно мало, подозреваю быдлокод. Либо жуткая неоптимизация, я хз


AngevengelistДата: Суббота, 12 Февраля 2011, 12:43 | Сообщение # 16
постоянный участник
Сейчас нет на сайте
Quote (TimKruz)
У тебя какой Delphi? У меня 2007 не открывает, а 7 выдаёт несоответствие типов.

У меня Delphi 7, чтобы скомпилить сервер, пришлось немного его переписать. Он запустился, но все равно живет своей жизнью. Я не пойму к какому порту подключается клиент.
TrelanДата: Суббота, 12 Февраля 2011, 12:47 | Сообщение # 17
участник
Сейчас нет на сайте
В Delphi 7 все работает, просто надо исправить код:
dir := round(readstring(1)); на dir := StrToInt((readstring(1)));
writestring(dir, 0); на writestring(PChar(FloatToStr(dir)), 0);


Мои игры:
Planet Lander
Escape From Hospital (в разработке)

lumennesДата: Воскресенье, 13 Февраля 2011, 00:22 | Сообщение # 18
Убийца Diablo
Сейчас нет на сайте
Quote (NeZnayu)
Тестировал на разных компах?

пока нет, но должен работать на разных как и на одном

Quote (mitch)
lumennes, какой смысл клиента на ГМ, а сервера на Дельфи?
я так понимаю у тебя клиент просчитывает координаты игрока и т.д.?

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

Quote (TimKruz)
lumennes, честно говоря, старую версию я не смог скомпилировать (не хватает какой-то библиотеки), а в "новой" не понятно, что и как происходит. Запускаю сервер, порт 7777, он слушает типа, запускаю клиент - "id -1", и всё. Ни клиент, ни сервер ни чего не говорят. И как, скажи пожалста, я должен понять, что всё работает? И как это работает.

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

Quote (TimKruz)
А ты какие компоненты для отправки используешь? Или что-то низкоуровневое? Если сервер и клиент на одном компе, то пинг обычно бывает 3~5 миллисекунд. Но это смотря, какая у тебя скорость интернета и насколько мощный компьютер.
P.S. На какой порт отсылает инфу клиент? И почему клиент не предлагает ввести IP сервера для подключения? Не понятно.

Смотри исходник клиента и сервера, там много комментариев от меня, вряд ли кто захочет разобраться не разберется)
Порт 13777, ну и если вы в GM разбираетесь вам без труда можно сделать чтоб порт запрашивал.

Quote (NeZnayu)
Что сервер то вообще делает? Просто голые данные отправляет?

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

Quote (Riketta)
mitch, дельфи мощнее, быстрее, стабильнее, а GM слаб и медленен.
Только ребенок в детском саду об этом не знает.

Верно.

Quote (TimKruz)
lumennes, исходники ты какие-то странные засунул. Delphi 2007 выдаёт ошибку, типа чего-то там у него нет, поэтому он не может открыть проект; Delphi 7 выдаёт два несоответствия типов:

Ой хрен знает че там, я кодировал на CodeGear Delphi 2009, может по этому он так плохо с 2007 дружит.

Quote (TimKruz)
Сам найди строчки 150 и 157.

Короче, либо ты не те исходники скинул, либо у меня неподходящая версия Delphi. Скорее всего, у тебя что-то экзотическое, вместо обычной Delphi, т.к. у меня всё работает нормально.


Сам думаю 2007 Delphi поставить так как у многих она и все жалуются на мои примеры, даже на GM)

Quote (TimKruz)
mitch, Riketta, приколите, GM как раз написан на Delphi! Но, скорее всего, ради упрощения разработки, у GM возможности слабые, т.к. разработчики вряд ли рассчитывали, что на их майкере будут делать ММОРПГ. Ясен пень, для крупных проектов нужно использовать непосредственно Delphi, а GM максимум сойдёт для простеньких игрушек.

Возможности GM можно расширить с помощью соответствующих библиотек.

Quote (TimKruz)
lumennes, да, кстати: сервер должен выводить на консоль (ещё желательно, чтобы писал лог в файл) всё, что делает, иначе контролировать его очень сложно. Ну, например:

Ну в новом примере я практически так и сделал.

Quote (mitch)
вообще-то клиент нормальной сетевой игры должен только отправлять запросы, а сервер обрабатывать и отсылать результат, например нажал кнопку "вперед", отправил соответствующий запрос на сервер, он там проверяет, может ли игрок переместиться вперед, и отправляет соответствующий результат

0_о по моему все наоборот, сервер должен принимать и отсылать данные а клиент уже обрабатывать их и выполнять соответствующие действия

Quote (Vinchensoo)
Никогда не слышал, думал, что на С++.

Однако GM написан на Delphi 40 000 строк кода, следующая 9 версия будет написана с нуля на C#

Quote (Vinchensoo)
Просто в лог, в консоли читать будет неудобно.

Хотя с другой стороны лог это проверка на то что приходят правильные данные.

Quote (Vinchensoo)
Судя по благодарности мне любимому, он использует не компоненты, а 39dll. Я тоже за нее, ибо шустрая и нет смысла убивать мозг чистыми сокетами.

Да, там используется 39dll.

Quote (Vinchensoo)
В идеале да, но тут, по-моему, что-то явно не то.
Качать лень, может вечером

Сейчас выложил стабильную версию, лентяй только не разберется.

Quote (mitch)
Vinchensoo, я имею ввиду что у lumennes все обрабатывается на клиенте, который сделан на ГМ
я не говорю, что гм + яп это плохо, просто если делать мморпг, то сервер нужно делать на том, на чем бы ты делал клиент(имхо)

Тут я не согласен. Сервер так как он предназначен для приема обработки и отправки каких то данных от клиента к клиенту должен быть куда мощнее чем то на чем ты писал клиент чтобы выполнять очень много операций в одно и то же время, соответственно Delphi или любой другой мощный ЯП, так как GM с трудом держит даже 50 человек в онлайне.

Quote (NeZnayu)
На самом деле клиент должен только передавать исходные данные ТОЛЬКО самого игрока.
Затем сервер все сам обрабатывает, просчитывает пути, считает повреждения, управляет чатом, короче делает всю грязную работу (и только в таком случае имеет смысл делать сервер не на гм, т.к. яп по понятным причинам обработает все это безобразие гораздо быстрее)
После обработки сервер отправит всем клиентам готовые данные, которые они просто примут и "отрисуют" уровень.

Вот в чем вся идея сервера на ЯП - взять на себя все ресурсоемкие процессы, чтобы как можно меньше расчетов производил ГМшный клиент.

Кто-нибудь слышал о проекте WonderLust? У них сервер написан на Си, я около года назад участвовал в тестах, держали около 70-90 человек, не могу сказать что все было гладко, но разница на лицо.

lumennes, короче ждем твоих объяснений


Блин, по моему если сервер будет выполнять всю черную работу то это будет очень большая нагрузка на него и без того если на нем к примеру сидит 2000 игроков и че то делают) По моему лучше если клиент сам будет обрабатывать данные которые ему присылает клиент.. Может я не прав но это мое представление о сервере..

Quote (Angevengelist)
Мне интересно, а что собственно в клиенте. У меня это пустое окно, если открою 10-20 клиентов у всех id -1.

Пропишите порт 13777 в сервере или измените его на свой любой в исходнике клиента.

Quote (Angevengelist)
Посмотрел немного код, сложилось такое чувство, что сервер писался немного аля "тяп-ляп", попробую немого модифицировать, если lumennes, не будет против. Уж очень меня раздражают некоторые моменты в коде.

(Спасибо Филу) я итак постоянно модифицирую код в более читабельный, так что в новой версии он получше, переписывай только потом покажи что получилось, что бы я взял себе на заметку как надо)

Quote (TimKruz)
Вроде бы обещают написать GameMaker 9 на C#, но все предыдущие (1-8) написаны на Delphi.

Жду не дождусь 9 версии happy говорят что она больше уже будет подходить для создания 3d игр.

Quote (TimKruz)
Не всегда так. Бывает, что сервер только обеспечивает связь между клиентами. Вообще-то есть уйма методов связи клиентов... Всё зависит от того, что вы хотите получить: минимальную нагрузку на клиенты или на сервер, лучшую синхронизацию или наибольшую скорость.

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

Quote (TimKruz)
У тебя какой Delphi? У меня 2007 не открывает, а 7 выдаёт несоответствие типов.

Наверно потому что у меня Delphi 2009 dry

Quote (Vinchensoo)
А если сервер на дельфи, а клиент на С++)
По-моему, твое мнение ошибочно)

если уж клиент на C++ то уж сервер подавно на C++ должен будет быть..

Quote (Vinchensoo)
Как-то сильно мало, подозреваю быдлокод. Либо жуткая неоптимизация, я хз

Скорее жуткая не оптимизация, 70-90 человек все равно мало...

Quote (Angevengelist)
У меня Delphi 7, чтобы скомпилить сервер, пришлось немного его переписать. Он запустился, но все равно живет своей жизнью. Я не пойму к какому порту подключается клиент.

Сотый раз пишу но посмотреть можно в клиенте.

Quote (Trelan)
В Delphi 7 все работает, просто надо исправить код:
dir := round(readstring(1)); на dir := StrToInt((readstring(1)));
writestring(dir, 0); на writestring(PChar(FloatToStr(dir)), 0);

surprised


Как мало вы знаете, как громко вы судите...
NeZnayuДата: Воскресенье, 13 Февраля 2011, 00:28 | Сообщение # 19
__танцуй!__
Сейчас нет на сайте
Quote (lumennes)
По моему лучше если клиент сам будет обрабатывать данные которые ему присылает клиент.. Может я не прав но это мое представление о сервере..

Все верно, но не в случае с ГМ.
Про синхронизацию слышали? Вот, а теперь добавь туда ГМшный клиент, понимаешь о чем я?


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
XDASДата: Воскресенье, 13 Февраля 2011, 02:39 | Сообщение # 20
Ярый фанат GML
Сейчас нет на сайте
Хотелось бы узнать, на каком гамаке сделано. Суть в том, что у меня на 8-ом гамаке выдает ошибочку о неизвестной функции в скрипте dll39_tcp_connect и собственно, где есть, что-то связанное с dll39 так же пишет ошибку. Хотя по идеи все правильно.

Добавлено (13.02.2011, 02:39)
---------------------------------------------
собственно когда исходник запускаешь он еще и 39длл не находит, хотя в папке лежит biggrin biggrin biggrin


Учу питон. Делаю Bang Bang-X.
P.s - Питон занятная вещь зараза)))
Мой сайт - http://easy-game.tk/
Мне больно видеть белый свет, мне лучше в полной темноте!Мне слишком тесно в заперти и я мечтаю об одном скорей свободу обрести © КиШ


Сообщение отредактировал XDAS - Воскресенье, 13 Февраля 2011, 02:12
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг