PDA

Просмотр полной версии : Еще 1 вопросик


Sashafaq
03.09.2009, 12:29
Помогите пожалста )
мне нужно из 1 пакета сосчитать с 2 по 24 бит включительно и добавить к нему еще 4 бита
это нужно для того чтобы иг бот мог ходить у меня на серве
там пакет (MoveBackwardToLocation) от клиента немного отличается от пакета который бот отправляет ( последними 4 битами 01 00 00 00 что означает что я типо мышкой нажал)

я сделал вот так

const
b1= '01 00 00 00';

var
cursq :String; //координаты бота

procedure Init; //Вызывается при включении скрипта
begin

end;

procedure Free; //Вызывается при выключении скрипта
begin

end;

procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения
begin

end;

procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения
begin
end;
begin
if FromClient and (pck[1]=#$01) then
begin
cursq:=pck;
pck:=cursq + hstr(b1);
end;
end.
но он то работает но он добавляет к пакету от клиента туже строку ))
помогите переделать немного

простите что такой примитивный вопрос но я долбался часа 4 чтобы написать такую шнягу и перепробывал много чего пользуясь примерами на этом сайте

mks
03.09.2009, 13:00
Sashafaq, начнем с того что ты говоришь про байты а не биты, если тебе надо заменить последние 4 байта с 25го на 01 00 00 00 в пакете от клиента с ИД 01, то сделай так:

begin
if FromClient and (pck[1]=#$01) then
begin
buf:=pck;
WriteD(1,25);
pck:=buf;
end;
end.

если я тебя не правильно понял выложи оба пакета, какой идет, и какой надо что б шел, подправим

Sashafaq
03.09.2009, 13:33
ты меня прально понял огромное пасибо тебе )

Добавлено через 2 минуты
ну чтото не оч получается выходит пакет уже не с ID 01

mks
03.09.2009, 13:53
Sashafaq, поправил во WriteD местами поменял числа, ато он не 1 в 25й писал, а 25 в 1й байт)

NLObP
04.09.2009, 00:09
Sashafaq, ты говорил, что надо 4 байта добавлять в конец, это так?

Проверь этот скрипт.
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if pck='' then exit; //пропускаем пустые пакеты
if FromClient and (pck[1]=#$01) then
begin
buf:=pck; //сохранили пакет
pck:=''; //очистили пакет
buf:=buf + hstr('01 00 00 00'); //создали новый
SendToServer; //отправили на сервер
end;
end.

Sashafaq
04.09.2009, 02:32
пасиб конешн но у мя подобие такого скрипт
но я хотел бы выборочно добавлять в конец ,если так оставить то от иг бота пральные пакеты идут а от клиента длиннее ,я хочу чтобы конкретно кажется с 25 бита были вот эти 01 00 00 00

TAMBIK
04.09.2009, 09:55
Sashafaq,

от mks,
если я тебя не правильно понял выложи оба пакета, какой идет, и какой надо что б шел, подправим
покажи пакеты
mks, как посоветовал что у те не получается

Добавлено через 9 минут
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if pck='' then exit; //пропускаем пустые пакеты
if FromClient and (pck[1]=#$01) then
begin
buf:=pck; //сохранили пакет
pck:=''; //очистили пакет
WriteD(1,25); //добавили с 25--01 00 00 00
SendToServer; //отправили на сервер
end;
end.

mks
05.09.2009, 22:25
TAMBIK,

buf:=pck; //сохранили пакет
pck:=''; //очистили пакет
WriteD(1,25); //добавили с 25--01 00 00 00
SendToServer; //отправили на сервер

конечно работать будет и так, но зачем сначала убивать пакет, а потом отправлять новый, если можно тупо заменить старый(как в моем варианте), еще плюс уже и коннект выбирать не придется, он пойдет туда куда и шел

NLObP
05.09.2009, 23:35
mks, изменение длины строки в переменной pck пакетхак нормально отработает?

mks
06.09.2009, 00:33
mks, изменении длины строки в переменной pck пакетхак нормально отработает?
а длина строки и так и так останется такой какой и была, например WriteD(255,2) тупо заменит в buf buf[2..5] на FF 00 00 00
или ты о чем?

Добавлено через 2 минуты
а, врубился че ты имел в виду, если размер пакета поменяется, хз не проверял вроде

NLObP
06.09.2009, 02:45
mks, я про то, что пакет изначально (неправильный от бота) короче на 4 байта. Мы его правим в лет. Прокатит ли?

mks
06.09.2009, 11:42
mks, я про то, что пакет изначально (неправильный от бота) короче на 4 байта. Мы его правим в лет. Прокатит ли?
да я понял, просто слегка непонятно со слов автора что требуется сделать, в моем случае пакет не удлиняется, поэтому прокатит, а если удлинить хз как пх отреагирует, надо просто попробовать, думаю должен проглотить

PS Если б автор выложил неправильный пакет от бота и пакет какой он хочет из него получить, уже давно сделали бы скрипт, а тут непонятно получается, давайте анализировать вместе:
1.

мне нужно из 1 пакета сосчитать с 2 по 24 бит включительно

судя по этому можно сделать вывод что длина пакета больше 24байт(разумеется учитываем что автор имел в виду байты а не биты)
2.

и добавить к нему еще 4 бита

операясь на вывод в п.1. дальше не должно было звучать "добавить", "добавить" я считаю должно звучать когда добавляем в конце пакета, а раз 25й байт не конец пакета, возникает вопрос: что имел в виду автор? Раз "добавить" мы исключили, остается два варианта - либо вставить 4 байта, либо заменить 4 байта
3.

там пакет (MoveBackwardToLocation) от клиента немного отличается от пакета который бот отправляет ( последними 4 битами 01 00 00 00 что означает что я типо мышкой нажал)

и наконец 3й пункт отвечает нам на вопрос второго, раз пакет отличается последними 4мя байтами, значит автор имел в виду не добавить, не вставить, а всетаки заменить, и причем заменить последние 4 байта, а раз последние 4 байта, тогда сделаем общий скрипт, нам уже не важно какая длина пакета:

begin
if FromClient and (pck[1]=#$01) then
begin
buf:=pck; //копируем пакет в буфер
WriteD(1,length(pck)-3); //меняем последние 4 байта на 01 00 00 00
pck:=buf; //копируем из буфера обратно в pck уже правильный пакет, и он летит дальше куда и летел
end;
end.

вот такие примерно задачки нам приходится решать когда люди расплывчато задают вопросы, чем понятней вы излогаете вопрос, тем быстрее получаете на него правильный ответ

alexteam
06.09.2009, 12:33
NLObP, отправит измененный пцк как только его отработают скрипты/плагины.
в следующие по очереди выполнения скрипты/плагины он будет "приходить" уже измененным.
прокатит.