lumennes, честно говоря, старую версию я не смог скомпилировать (не хватает какой-то библиотеки), а в "новой" не понятно, что и как происходит. Запускаю сервер, порт 7777, он слушает типа, запускаю клиент - "id -1", и всё. Ни клиент, ни сервер ни чего не говорят. И как, скажи пожалста, я должен понять, что всё работает? И как это работает.
Quote (lumennes)
Почему отправка и прием данных с сервера Delphi так сильно опаздывает?
А ты какие компоненты для отправки используешь? Или что-то низкоуровневое? Если сервер и клиент на одном компе, то пинг обычно бывает 3~5 миллисекунд. Но это смотря, какая у тебя скорость интернета и насколько мощный компьютер. P.S. На какой порт отсылает инфу клиент? И почему клиент не предлагает ввести IP сервера для подключения? Не понятно.
mitch, дельфи мощнее, быстрее, стабильнее, а GM слаб и медленен. Только ребенок в детском саду об этом не знает. Fougerite - Rust Server OpenSource API TerraDev - Terraria OpenSource Hack
lumennes, исходники ты какие-то странные засунул. Delphi 2007 выдаёт ошибку, типа чего-то там у него нет, поэтому он не может открыть проект; Delphi 7 выдаёт два несоответствия типов:
Сам найди строчки 150 и 157.
Короче, либо ты не те исходники скинул, либо у меня неподходящая версия Delphi. Скорее всего, у тебя что-то экзотическое, вместо обычной Delphi, т.к. у меня всё работает нормально.
Сообщение отредактировал TimKruz - Суббота, 12 Февраля 2011, 11:00
mitch, Riketta, приколите, GM как раз написан на Delphi! Но, скорее всего, ради упрощения разработки, у GM возможности слабые, т.к. разработчики вряд ли рассчитывали, что на их майкере будут делать ММОРПГ. Ясен пень, для крупных проектов нужно использовать непосредственно Delphi, а GM максимум сойдёт для простеньких игрушек.
Добавлено (12.02.2011, 11:09) --------------------------------------------- lumennes, да, кстати: сервер должен выводить на консоль (ещё желательно, чтобы писал лог в файл) всё, что делает, иначе контролировать его очень сложно. Ну, например:
Code
[12/02/2011][11:06:25]Отправка данных положения объектов клиенту №x... [12/02/2011][11:06:56]Подключение клиента №y... [12/02/2011][11:07:03]Подключение клиента №y успешно! [12/02/2011][11:07:16]Синхронизация клиентов...
Riketta, думаешь я настолько туп, что не разбираюсь в этом? вообще-то клиент нормальной сетевой игры должен только отправлять запросы, а сервер обрабатывать и отсылать результат, например нажал кнопку "вперед", отправил соответствующий запрос на сервер, он там проверяет, может ли игрок переместиться вперед, и отправляет соответствующий результат
Riketta, думаешь я настолько туп, что не разбираюсь в этом? вообще-то клиент нормальной сетевой игры должен только отправлять запросы, а сервер обрабатывать и отсылать результат, например нажал кнопку "вперед", отправил соответствующий запрос на сервер, он там проверяет, может ли игрок переместиться вперед, и отправляет соответствующий результат
А что, клиент на гм этого делать не может? Ты задал тупой вопрос, получил ответ КЭПа, что тебя не устраивает? Ты ж не спросил, как работает данный клиент, ты опять начал разводить холивар про гм + яп.
Quote (TimKruz)
mitch, Riketta, приколите, GM как раз написан на Delphi! Но, скорее всего, ради упрощения разработки, у GM возможности слабые, т.к. разработчики вряд ли рассчитывали, что на их майкере будут делать ММОРПГ. Ясен пень, для крупных проектов нужно использовать непосредственно Delphi, а GM максимум сойдёт для простеньких игрушек.
Никогда не слышал, думал, что на С++. Да и по ответу, мне кажется, что ты не очень владеешь материалом =) Отсутсвие быдлокода в клиенте, эффективные алгоритмы, оптимизация позволяют делать клиент на гм для ммо среднего размера. Другой вопрос, что такой оптимизацией/алгоритмами на форуме могут и будут(а не тупо забьют, аля и так пойдет) заниматься максимум 10 человек.
Quote (TimKruz)
---------------------------------------------lumennes, да, кстати: сервер должен выводить на консоль (ещё желательно, чтобы писал лог в файл) всё, что делает, иначе контролировать его очень сложно. Ну, например:
Просто в лог, в консоли читать будет неудобно.
Quote (TimKruz)
А ты какие компоненты для отправки используешь? Или что-то низкоуровневое? Если сервер и клиент на одном компе, то пинг обычно бывает 3~5 миллисекунд. Но это смотря, какая у тебя скорость интернета и насколько мощный компьютер. P.S. На какой порт отсылает инфу клиент? И почему клиент не предлагает ввести IP сервера для подключения? Не понятно.
Судя по благодарности мне любимому, он использует не компоненты, а 39dll. Я тоже за нее, ибо шустрая и нет смысла убивать мозг чистыми сокетами.
Quote (NeZnayu)
Что сервер то вообще делает? Просто голые данные отправляет?
В идеале да, но тут, по-моему, что-то явно не то. Качать лень, может вечером
Vinchensoo, я имею ввиду что у lumennes все обрабатывается на клиенте, который сделан на ГМ я не говорю, что гм + яп это плохо, просто если делать мморпг, то сервер нужно делать на том, на чем бы ты делал клиент(имхо)
Сообщение отредактировал mitch - Суббота, 12 Февраля 2011, 11:34
На самом деле клиент должен только передавать исходные данные ТОЛЬКО самого игрока. Затем сервер все сам обрабатывает, просчитывает пути, считает повреждения, управляет чатом, короче делает всю грязную работу (и только в таком случае имеет смысл делать сервер не на гм, т.к. яп по понятным причинам обработает все это безобразие гораздо быстрее)
После обработки сервер отправит всем клиентам готовые данные, которые они просто примут и "отрисуют" уровень.
Вот в чем вся идея сервера на ЯП - взять на себя все ресурсоемкие процессы, чтобы как можно меньше расчетов производил ГМшный клиент.
Кто-нибудь слышал о проекте WonderLust? У них сервер написан на Си, я около года назад участвовал в тестах, держали около 70-90 человек, не могу сказать что все было гладко, но разница на лицо.
Мне интересно, а что собственно в клиенте. У меня это пустое окно, если открою 10-20 клиентов у всех id -1.
Добавлено (12.02.2011, 12:14) --------------------------------------------- Посмотрел немного код, сложилось такое чувство, что сервер писался немного аля "тяп-ляп", попробую немого модифицировать, если lumennes, не будет против. Уж очень меня раздражают некоторые моменты в коде.
Вроде бы обещают написать GameMaker 9 на C#, но все предыдущие (1-8) написаны на Delphi.
Quote (NeZnayu)
На самом деле клиент должен только передавать исходные данные ТОЛЬКО самого игрока. Затем сервер все сам обрабатывает, просчитывает пути, считает повреждения, управляет чатом, короче делает всю грязную работу (и только в таком случае имеет смысл делать сервер не на гм, т.к. яп по понятным причинам обработает все это безобразие гораздо быстрее) После обработки сервер отправит всем клиентам готовые данные, которые они просто примут и "отрисуют" уровень.
Не всегда так. Бывает, что сервер только обеспечивает связь между клиентами. Вообще-то есть уйма методов связи клиентов... Всё зависит от того, что вы хотите получить: минимальную нагрузку на клиенты или на сервер, лучшую синхронизацию или наибольшую скорость.
я не говорю, что гм + яп это плохо, просто если делать мморпг, то сервер нужно делать на том, на чем бы ты делал клиент(имхо)
А если сервер на дельфи, а клиент на С++) По-моему, твое мнение ошибочно)
Quote (TimKruz)
Не всегда так. Бывает, что сервер только обеспечивает связь между клиентами. Вообще-то есть уйма методов связи клиентов... Всё зависит от того, что вы хотите получить: минимальную нагрузку на клиенты или на сервер, лучшую синхронизацию или наибольшую скорость.
В ММО все должно быть именно так) Остальные способы больше пригодны для мультиплеера.
Quote (NeZnayu)
Кто-нибудь слышал о проекте WonderLust? У них сервер написан на Си, я около года назад участвовал в тестах, держали около 70-90 человек, не могу сказать что все было гладко, но разница на лицо.
Как-то сильно мало, подозреваю быдлокод. Либо жуткая неоптимизация, я хз
У тебя какой Delphi? У меня 2007 не открывает, а 7 выдаёт несоответствие типов.
У меня Delphi 7, чтобы скомпилить сервер, пришлось немного его переписать. Он запустился, но все равно живет своей жизнью. Я не пойму к какому порту подключается клиент.
В Delphi 7 все работает, просто надо исправить код: dir := round(readstring(1)); на dir := StrToInt((readstring(1))); writestring(dir, 0); на writestring(PChar(FloatToStr(dir)), 0);
пока нет, но должен работать на разных как и на одном
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 версии говорят что она больше уже будет подходить для создания 3d игр.
Quote (TimKruz)
Не всегда так. Бывает, что сервер только обеспечивает связь между клиентами. Вообще-то есть уйма методов связи клиентов... Всё зависит от того, что вы хотите получить: минимальную нагрузку на клиенты или на сервер, лучшую синхронизацию или наибольшую скорость.
Лично для меня приорететны минимальная нагрузка на сервер и наибольшая скорость передачи данных, а обрабатывать действия пусть будет клиент.
Quote (TimKruz)
У тебя какой Delphi? У меня 2007 не открывает, а 7 выдаёт несоответствие типов.
Наверно потому что у меня Delphi 2009
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);
Хотелось бы узнать, на каком гамаке сделано. Суть в том, что у меня на 8-ом гамаке выдает ошибочку о неизвестной функции в скрипте dll39_tcp_connect и собственно, где есть, что-то связанное с dll39 так же пишет ошибку. Хотя по идеи все правильно.
Добавлено (13.02.2011, 02:39) --------------------------------------------- собственно когда исходник запускаешь он еще и 39длл не находит, хотя в папке лежит