mars2107
21.10.2013, 22:15
И снова здрасте :goplol:
Прошу помощи допилить скрипт, а то руки уже не двигаются. Ленивый я :bl:
Как только будет готов, думаю ув. Talala перенесет эту тему из обсуждения в нужный раздел без мусора.
Все знают, что в игре дальше чем на 7 метров не ТПшнуться, а если кусками? см. скрипт.
var
nach,kon:string;
n, dx, dy, dz, x1, x2, y1, y2, z1, z2:double;
begin
if FromClient then
case pck[1] of
#$fd: case reads(7) of
'.': begin
nach:=hstr('CD 00 65 32 FF 04 C5 B4 92 43 5D 4B D0 43 AE BF 67 43 3E 00 '); // Составляем и задаем вручную начальную точку
kon:=hstr('CD 00 65 32 FF 04 0D B6 AE 43 E9 B6 CB 43 07 EE 67 43 3E 00 '); // Составляем и задаем вручную конечную точку
x2 := StrToFloat(Copy(nach, 7, 4));
y2 := StrToFloat(Copy(nach, 11, 4));
z2 := StrToFloat(Copy(nach, 15, 4)); // Выдираем координаты
x1 := StrToFloat(Copy(kon, 7, 4));
y1 := StrToFloat(Copy(kon, 11, 4));
z1 := StrToFloat(Copy(kon, 15, 4));
while (sqrt((x1 - x2)*(x1 - x2)+(y1 - y2)*(y1 - y2)+ (z1 - z2)*(z1 - z2)) > 5) do // проверяем пока не больше пяти, когда будет меньше
begin // значит пришли к точке назначения
n := sqrt((x1 - x2)*(x1 - x2)+(y1 - y2)*(y1 - y2)+ (z1 - z2)*(z1 - z2))*0.2;
dx := (x1 - x2)/n;
dy := (y1 - y2)/n;
dz := (z1 - z2)/n;
x2 := x2 + dx; // Здесь начинаем прибавлять от начала наши 5ти метровые шаги
y2 := y2 + dy;
z2 := z2 + dz;
buf := HStr('CD 00 65 32 FF 04') + FloatToStr(x2) + FloatToStr(y2) + FloatToStr(z2);
SendToServer;
delay(500);
end;
end;
end;
end;
end.
Посмотрели? Ясно суть? Если нет, попытаюсь объяснить.
Для упрощения проверки я не стал заморачиваться отлова координать, а составил вручную 1ую и 2ую точку. Он у меня рассчитывает расстояние и делит на отрезки по 5 метров. Запускает проверку если все расстояние больше 5 метров то к начальной координате прибавляет 5 метров и вообщем пока не дойдет до конечной. И да, активируеться посылом в чат знака "." точка. Объясняю я плохо /facepalm
На идею натолкнул altairalentus ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) по некоторым причинам он пока занят и не может над этим работать, ну а мне чтобы было проще я тут с вами пообщаюсь.
Сразу о косяках:
1. Надо исправить и добавить отлов начальной точки X Y Z и правильо выдернуть их из пакета.
2. Округлить тип double с наименьшими потерями.
3. Составить правильно пакет для телепорта записываемый в buf.
Для примера можете глянуть, написал на делфи, чтобы видеть как он будет делить весь путь. Координаты вводятся типа XXXXYYYYZZZZ, клик на форму очищает текстовой поле. В текстовом поле выводиться по каким координатам он будет ТПшиться до конечной цели.
Всё обсуждение проводить тут. Как будет готовый рабочий вариант, тему перенесут думаю.
Прошу помощи допилить скрипт, а то руки уже не двигаются. Ленивый я :bl:
Как только будет готов, думаю ув. Talala перенесет эту тему из обсуждения в нужный раздел без мусора.
Все знают, что в игре дальше чем на 7 метров не ТПшнуться, а если кусками? см. скрипт.
var
nach,kon:string;
n, dx, dy, dz, x1, x2, y1, y2, z1, z2:double;
begin
if FromClient then
case pck[1] of
#$fd: case reads(7) of
'.': begin
nach:=hstr('CD 00 65 32 FF 04 C5 B4 92 43 5D 4B D0 43 AE BF 67 43 3E 00 '); // Составляем и задаем вручную начальную точку
kon:=hstr('CD 00 65 32 FF 04 0D B6 AE 43 E9 B6 CB 43 07 EE 67 43 3E 00 '); // Составляем и задаем вручную конечную точку
x2 := StrToFloat(Copy(nach, 7, 4));
y2 := StrToFloat(Copy(nach, 11, 4));
z2 := StrToFloat(Copy(nach, 15, 4)); // Выдираем координаты
x1 := StrToFloat(Copy(kon, 7, 4));
y1 := StrToFloat(Copy(kon, 11, 4));
z1 := StrToFloat(Copy(kon, 15, 4));
while (sqrt((x1 - x2)*(x1 - x2)+(y1 - y2)*(y1 - y2)+ (z1 - z2)*(z1 - z2)) > 5) do // проверяем пока не больше пяти, когда будет меньше
begin // значит пришли к точке назначения
n := sqrt((x1 - x2)*(x1 - x2)+(y1 - y2)*(y1 - y2)+ (z1 - z2)*(z1 - z2))*0.2;
dx := (x1 - x2)/n;
dy := (y1 - y2)/n;
dz := (z1 - z2)/n;
x2 := x2 + dx; // Здесь начинаем прибавлять от начала наши 5ти метровые шаги
y2 := y2 + dy;
z2 := z2 + dz;
buf := HStr('CD 00 65 32 FF 04') + FloatToStr(x2) + FloatToStr(y2) + FloatToStr(z2);
SendToServer;
delay(500);
end;
end;
end;
end;
end.
Посмотрели? Ясно суть? Если нет, попытаюсь объяснить.
Для упрощения проверки я не стал заморачиваться отлова координать, а составил вручную 1ую и 2ую точку. Он у меня рассчитывает расстояние и делит на отрезки по 5 метров. Запускает проверку если все расстояние больше 5 метров то к начальной координате прибавляет 5 метров и вообщем пока не дойдет до конечной. И да, активируеться посылом в чат знака "." точка. Объясняю я плохо /facepalm
На идею натолкнул altairalentus ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) по некоторым причинам он пока занят и не может над этим работать, ну а мне чтобы было проще я тут с вами пообщаюсь.
Сразу о косяках:
1. Надо исправить и добавить отлов начальной точки X Y Z и правильо выдернуть их из пакета.
2. Округлить тип double с наименьшими потерями.
3. Составить правильно пакет для телепорта записываемый в buf.
Для примера можете глянуть, написал на делфи, чтобы видеть как он будет делить весь путь. Координаты вводятся типа XXXXYYYYZZZZ, клик на форму очищает текстовой поле. В текстовом поле выводиться по каким координатам он будет ТПшиться до конечной цели.
Всё обсуждение проводить тут. Как будет готовый рабочий вариант, тему перенесут думаю.