Показать сообщение отдельно
Старый 19.05.2009, 21:32   #12
Местный
 
Аватар для pmen
 
Регистрация: 16.05.2009
Сообщений: 129
Сказал Спасибо: 66
Имеет 62 спасибок в 34 сообщенях
pmen пока неопределено
По умолчанию

как я понял значит если запретить прием пакета на атаку это не изменит игровой процесс!? Просто мой клиент не будет отобпражать это действие?Вот я набрасал скрипт
Цитата:
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;

Последний раз редактировалось alexteam, 19.05.2009 в 22:15. Причина: Добавлено сообщение
pmen вне форума   Ответить с цитированием