Просмотр полной версии : Блок пакета
Вот у меня такой вопросик) Почему этот скрипт не блочит пакет 0F? Как сделать так чтобы при попытке открыть инвентарь клиент бы не разрешал этого делать??
begin
if FromClient and (pck=#$0F) then pck:='';
end.
Он его блочит но дело в том что этот пакет не на открытие инвентаря, а на список вещей в нем. А сам инвентарь открывается клиентом без каких либо пакетов.
А можно например запретить клиенту принимать пакет от сервера UpdateStatus ??
Ну да ... только тогда надо использовать FromServer
alexteam
19.05.2009, 17:32
if (pck<>'') then
if FromClient and (pck[1]=#$0F) then
pck:='';
касаемо первого поста.
if (pck<>'') then
if FromClient and (pck[1]=#$0F) then
pck:='';
касаемо первого поста.
Открывает инвентарь
Имеется ввиду что так правильней писать
а! Я кажется все начинаю понимать)!
а! Я кажется все начинаю понимать)!
что надо сначала понять какая цель, потом подумать над решением и грамотно его сформулировать? сомневаюсь...
Возможно ли запретить пакет от сервера на атаку по тебе?
сам подумай тебя атакуют, моб находится на сервере ты находишься на сервере, и ещё куча народа находится там же. клиент отображает то что творится там, а не наоборот. есть баги, которые кстати на форуме запрещено обсуждать даже, профикшеные почти на всех серверах более или менее прямых. Так что решать тебе играть на кривом сервере и пользоваться этими багами или играть на нормальном сервере где багов почти нет и если они и есть, то не известны большенству...
как я понял значит если запретить прием пакета на атаку это не изменит игровой процесс!? Просто мой клиент не будет отобпражать это действие?Вот я набрасал скрипт
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;
как я понял значит если запретить прием пакета на атаку это не изменит игровой процесс!? Просто мой клиент не будет отобпражать это действие?
Именно так. Пример. Лаги или зависание клиента во время боя - ты труп.
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot