Как именно работает клиент и сервер игры (для новичков)
Очень много непонимания у людей, как именно работает клиент и сервер игры. Попробую немного объяснить.
Все действия в игре происходят в 99% на сервере и только на нем, а клиент просто является графическим интерфейсом между сервером и игроком.
Пакеты от клиента почти всегда являются запросами на попытку каких либо действий, а пакеты от сервера почти всегда являются либо ответами на запросы клиента, разрешающие или запрещающие запрошенное клиентом действие, либо являются информирующими пакетами о каких либо изменениях в статусе игрока, в окружающем мире или прочей информации, немедленно отражающейся в клиенте как факт.
Вот, как пример, грубо приближенный 'диалог' сервера с клиентом:
('сервер клиенту:' - это посылается пакет клиенту от сервера)
('клиент серверу:' - это посылается пакет серверу от клиента)
сервер клиенту: в координатах x,z,y появился моб
сервер клиенту: это моб имеющий ID флема
(тут игрок увидел появившегося вдалеке флема и тычет на него мышой)
клиент серверу: я хочу его выделить (это последствие попытки игрока выделить моба)
сервер клиенту: да, моб достаточно близко и он выделябельный. вам разрешается его выделить.
(игрок видит, что цель выделилась и нажимает атаку)
клиент серверу: я хочу атаковать выделенного моба (реакция на попытку игрока атаковать)
сервер клиенту: атаковать запрещаю, так как ты далеко от моба, для этого типа атаки.
клиент серверу: ок, бегу к мобу
сервер клиенту: разрешаю.
(игрок видит что его чар побежал к мобу)
сервер клиенту: ты передвинулся. Теперь ты в координатах рядом с мобом.
(игрок видит, что он прибежал к мобу)
...
...
клиент серверу: я хочу атаковать выделенного моба
сервер клиенту: разрешаю, вы нанесли ему 100 урона.
(здесь и далее игрок видит присланные от сервера цифры урона)
клиент серверу: я опять атакую моба
сервер клиенту: разрешаю, вы нанесли ему еще 120 урона
сервер клиенту: а вот он вам ответил на 50 урона
сервер клиенту: у вас теперь здоровья меньше на 50
(здесь игрок видит как его здоровье уменьшилось)
клиент серверу: и опять я атакую моба
сервер клиенту: а вот фиг тебе, атаку запрещаю.
(здесь игрок увидел, что атака не прошла, урона не было)
сервер клиенту: так как моб умер.
(здесь игрок увидел, что моб упал и сдох)
сервер клиенту: ой, из него выпала шняга
(здесь повяляется дроп)
сервер клиенту: и еще одна шняга
(здесь повяляется еще дроп)
клиент серверу: я хочу поднять шнягу
сервер клиенту: разрешаю. Вы подняли шнягу.
(шняга упала к нам в инвентарь и изчезла с земли)
...
...
..
Дальше все в таком же духе.
Я привел пример очень грубо, без указания аргументов пакетов и какой либо конкретики вообще. (да и логику протокола немного покоробил)
Но, здесь видно главное что я хотел сказать - клиент не управляет сервером, он всего лишь 'запрашивает' разрешение на действия, а сервер уже решает что и сколько и как именно и что за это будет клиенту...
Надеюсь, что теперь флуда и глупостей на форуме будет меньше. ;)
В догонку, возникает вопрос, а как тогда возможно читерить, если за всем следит только сервер, а клиент ничего не решает ?
Мой ответ простой: Сервера пишут не боги, а люди. Следовательно, сервера также часто ошибаются, главное, надо найти как можно обмануть сервер на его ошибках так, чтобы это было выгодно.
Последний раз редактировалось Sauron; 26.03.2008 в 09:26.
...
(пользователь с ником user входит в игру) клиент серверу: я хочу войти в игру.
(пользователь с помощью чит программ меняет ник на admin) сервер клиенту: разрешаю. Проверяю данные. клиент серверу: отдаю данные. сервер клиенту: У тебя был ник user!
клиент серверу: а мне пофиг у меня ник admin!
сервер клиенту: :( разрешаю вход.
...
(через некоторое время) сервер клиенту: (Несоответствие данных)
(выкидывает из игры)
...
(пользователь с ником user входит в игру) клиент серверу: я хочу войти в игру.
(пользователь с помощью чит программ меняет ник на admin) сервер клиенту: разрешаю. Проверяю данные. клиент серверу: отдаю данные. сервер клиенту: У тебя был ник user!
клиент серверу: а мне пофиг у меня ник admin!
сервер клиенту: :( разрешаю вход.
...
(через некоторое время) сервер клиенту: (Несоответствие данных)
(выкидывает из игры)
Чушь полнейшая, ты не знаешь о чем говоришь.
Кстати, написать 'разрешаю' ПЕРЕД 'проверяю данные' это непростительная ошибка для человека, который замахнулся писать защиту для сервера (хаха как я тебя под$%6ал, но ты не серчай, я же жестокий)
Сервер сразу пошлет уже на второй строчке.
Сервер делает вывод на данных в своей базе, а не на том, что ему шлет клиент.
и главное - правильный (т.е. теоритически абсолютный (сверический в вакууме )) сервер это абсолютный ПАРАНОИК, которые не верит ничему.
Единственая беда серверов подобно RF - это разгильдяйство кодеров, что его написали.
скажу еще раз всем - надо понимаеть что и как работает, чтобы понимать, как можно сломать. И не придумывайте всякую чепуху, а то стыдно за вас,
лучше идите учитесь, чтобы потом уметь.
Грубо говоря - Чтобы 'что то' _правильно_ сломать, надо изначально уметь это 'что то' построить. (выучите это и повторяйте как отче наш.)
Последний раз редактировалось Sauron; 24.04.2008 в 10:06.
Чушь полнейшая, ты не знаешь о чем говоришь.
Кстати, написать 'разрешаю' ПЕРЕД 'проверяю данные' это непростительная ошибка для человека, который замахнулся писать защиту для сервера (хаха как я тебя под$%6ал, но ты не серчай, я же жестокий)
Сервер сразу пошлет уже на второй строчке.
Сервер делает вывод на данных в своей базе, а не на том, что ему шлет клиент.
и главное - правильный (т.е. теоритически абсолютный (сверический в вакууме )) сервер это абсолютный ПАРАНОИК, которые не верит ничему.
Единственая беда серверов подобно RF - это разгильдяйство кодеров, что его написали.
скажу еще раз всем - надо понимаеть что и как работает, чтобы понимать, как можно сломать. И не придумывайте всякую чепуху, а то стыдно за вас,
лучше идите учитесь, чтобы потом уметь.
Грубо говоря - Чтобы 'что то' _правильно_ сломать, надо изначально уметь это 'что то' построить. (выучите это и повторяйте как отче наш.)
Клиент ты нае6@л, а не сервер, такими глупостями занимаешься, ну право как ребенок.
Вместо пустой траты времени, лучше бы ты учился, чтобы хоть как то улучшить свою недозащиту.
Наверное в этой теме будет уместен мой вопрос к Саурону.
Это набросок алгоритма РЕКОРДЕРА
1 выбираем персонажа "АКТЕР"(сид ид, пишем только его)
2 пишем в файл пакеты о действиях "АКТЕР"а, каждая запись 1 пакет с меткой таймера (с начала записи). т.е.
1;datatime1;s>packet"АКТЕР"1.
2;datatime2;s>packet"АКТЕР"2.
3 отмечаем начало и конец записи begin end
Переходим к проигрывателю, алг ПЛЭЙЕР:
1 Устанавливаем "ЗРИТЕЛЯ" в зрительный зал
2 Заправляем киноленту - открываем файл, который записали рекордером
3 Запускаем таймер
4 Считываем последовательно записи, сверяя временную метку
5 Если время пришло посылаем ЭНый пакет ЗРИТЕЛЮ.
---------------------------------
При просмотре меняем актеров подставляя понравившийся СИДИД
Прошу высказать замечания предложения, пожелания.
Интересно, а что это сейчас так БУМкнуло?
И где интересно мой воздушный шарик?
И откуда тут взялась эта зеленая тряпочка?
Ааааа!Аааааа!Аааааа!Ааааа!АААААААААААА!
::divan::
Хм.. а тогда что овердамаг и спидхак?
ОД:
1кс - выделяю
2ск - разрешаю
3кс - применяю скил Х
4ск - (откат, мп, расстояние, тип и тд проверки) разрешаю
5ск - вы нанесли ХХ дмг
6ск - выделение пропало, цель убита
Если дмг считаеться на серваке, то как наноситься необходимый урон? оО
СХ:
кс - я нахожусь тут
ск - подтверждаю
кс - тыкаю мышкой туда
ск - (расстояние, активность, кликабельность) подтверждаю
ск - начато движение с вашей скоростью
кс - я уже тут
ск - Чаго? оО
Судя внешне, перс тыркаеться и дергаеться, значит на пункте "Чаго?" сервер принял положение клиента, а клиент не успел анимировать передвижение. Я прально понимаю? Если взять за то, что СХ дает не мгновенное перемещение, то в пакетиках идет поттасовка о данных скорости перемещения, тобишь какой-то фактор Ф? Или все вообще не так?
Вы уж звиняете за такие тупые вопросы, я просто нуб, но хочу хоть чуть-чуть вникнуть в тему )))
То что я скажу ниже уже давно не является секретом и везде лежит открыто, поэтому пишу без хайда.
На счет спидхака:
из за возможности лагов и запаздывания система премещения имеет большой гистерезис, и обманывая клиент мы в конечном счете посылаем серверу координату заведомо дальше чем следовало. Сервер думает, что был лаг и перс реально убежал так далеко и НЕ ПРОВЕРЯЯ реальной скорости и возможности перемещения продолжает движение уже из указанной точки. Т.е. проблема спидхака в РФ в проверке на стороне сервера.
На счет овердамага:
на сервере отсутствуют некоторые проверки на скорость атаки (ланчеры) и элементы атак (проверки на использование патронов)
Реализацию данных эксплойтов можно найти под хайдами на этом форуме.
Последний раз редактировалось Sauron; 17.06.2008 в 05:00.