PDA

Просмотр полной версии : Блок пакета


pmen
19.05.2009, 17:27
Вот у меня такой вопросик) Почему этот скрипт не блочит пакет 0F? Как сделать так чтобы при попытке открыть инвентарь клиент бы не разрешал этого делать??



begin
if FromClient and (pck=#$0F) then pck:='';
end.

Fer123
19.05.2009, 17:28
Он его блочит но дело в том что этот пакет не на открытие инвентаря, а на список вещей в нем. А сам инвентарь открывается клиентом без каких либо пакетов.

pmen
19.05.2009, 17:30
А можно например запретить клиенту принимать пакет от сервера UpdateStatus ??

Fer123
19.05.2009, 17:32
Ну да ... только тогда надо использовать FromServer

alexteam
19.05.2009, 17:32
if (pck<>'') then
if FromClient and (pck[1]=#$0F) then
pck:='';

касаемо первого поста.

pmen
19.05.2009, 17:35
if (pck<>'') then
if FromClient and (pck[1]=#$0F) then
pck:='';

касаемо первого поста.

Открывает инвентарь

Fer123
19.05.2009, 17:37
Имеется ввиду что так правильней писать

pmen
19.05.2009, 17:40
а! Я кажется все начинаю понимать)!

Grinch
19.05.2009, 18:14
а! Я кажется все начинаю понимать)!
что надо сначала понять какая цель, потом подумать над решением и грамотно его сформулировать? сомневаюсь...

pmen
19.05.2009, 21:03
Возможно ли запретить пакет от сервера на атаку по тебе?

Grinch
19.05.2009, 21:20
сам подумай тебя атакуют, моб находится на сервере ты находишься на сервере, и ещё куча народа находится там же. клиент отображает то что творится там, а не наоборот. есть баги, которые кстати на форуме запрещено обсуждать даже, профикшеные почти на всех серверах более или менее прямых. Так что решать тебе играть на кривом сервере и пользоваться этими багами или играть на нормальном сервере где багов почти нет и если они и есть, то не известны большенству...

pmen
19.05.2009, 21:32
как я понял значит если запретить прием пакета на атаку это не изменит игровой процесс!? Просто мой клиент не будет отобпражать это действие?Вот я набрасал скрипт

var
SocialAction:string;
begin
if FromClient and (pck=#$2D) then SocialAction:=pck; //назначаем переменной SocialAction содержимое пакета. условие проходим когда пакет равен #$2D. (полный пакет.. а не первый его байт. тобишь это условие выполнятся не будет никогда. ибо пакет социального действия по длине больше 1 байта.)

if FromClient and (pck=SocialAction) then //сюда мы будем попадать если пакет идет от клиента и он равен SocialAction. из за ошибки в логике выше - мы сюда будем попадать при пустых пакетах от клиента, ибо переменная SocialAction по умолчанию равна пустому значению, а сама переменная SocialAction никогда не назначается.
begin
if (pck< >'#$05') then //внутрь мы попадем если пакет не равен строке '#$05'... если мы прошли предыдущее условие внутрь мы попадем, т.к. врядли пакет в строковом представлении будет равен этому значению.
if FromServer and (pck[1]=#$05) then //а сюда мы точно никогда не попадем.. т.к. пред-предыдущее условие мы можем пройти только при пакете от клиента. а тут противоположное ему условие.
pck:=''; //обнуляем пакет.
end;
end.

//alexteam: расписал логику в твоем скрипте... ошибки поймеш сам..
на будущее.
в начале тела скрипта (обрабатывающей пакеты части) неплохо бы ставить
if pck = '' then exit;
это исключит попытку обработать "пустышки" в ревизия пакетхака ниже 81й.
pck[1] - первый байт пакета, его идентификатор. (packetsxxx.ini)
все остальное pck[2..length(pck)-1] - тело пакета, его данные. длинна pck и соответственно данных - зависит от типа пакета, тобишь pck[1]
судя по скрипту ты еще не вынес для себя то что pck это строка которая является по определению массивом, первым элементом которого является идентификатор пакета, а последующие (если они имеются) - данными.
рекомендую порыскать по тырнету в поисках информации по массивам и организации строковых типов.
или просто уяснить что строка = динамически расширяемый массив символов.
string = array of char;

NLObP
19.05.2009, 21:44
как я понял значит если запретить прием пакета на атаку это не изменит игровой процесс!? Просто мой клиент не будет отобпражать это действие?

Именно так. Пример. Лаги или зависание клиента во время боя - ты труп.