PDA

Просмотр полной версии : Тащить объект по маршруту


CoolNickname
21.09.2014, 02:27
Всем привет. Суть скрипта в том что бы протащить "ящик" по заданному маршруту. Сейчас написал скрипт который просто ведет чара по координатам, но теперь не знаю как прикрутить сюда саму "тащилку". Выглядеть это должно так: отбежали от ящика, нажали атаку-ящик подъехал к чару, и так далее к конечной точке. Может кто то уже делал нечто подобное, помогите плиз)

Breadfan
21.09.2014, 14:54
считывай текущие координаты ящика и перса (от сервера приходит), следом - Dist:=sqrt(deltaX^2+deltaY^2+deltaZ^2); - расстояние меж объектами. Расстояние больше положенного - то взять в таргет( если не взят) и жмякнуть атаку. Всё.

CoolNickname
21.09.2014, 16:12
Спасибо за ответ, но у меня проблема в другом, я не знаю как сделать, что бы чар одновременно бежал к нужным координатам и при этом тащил ящик. Если я даю команду MoveTo(x,y,z),а потом команду MoveBlock, то движение прекращается.

Breadfan
22.09.2014, 10:59
ну смотри. у тебя пусть будут distmin\distmax- максимальное\минимальное расстояние до ящика. Персонаж бежит. В процессе проверяешь текущую дистанцию до ящика. Как только она > distmax - "атакуеш" ящик до тех пор, пока она не станет < distmin. Как только стала - возобновил движение персонажа по контрольным точкам пути (ну или как ты там им бегаешь).

CoolNickname
22.09.2014, 17:00
Так в этом и проблема не выходит зациклить движение к точке, если я пишу например так:
while not PosInRange(x,y,z,100) do
begin
MoveTo(x,y,z);
end;
Тут PosInRange() возвратит true, если чар находится меньше чем за 100 пойнтов от точки и false, если дальше чем 100 пойнтов.
То клиент и пх зависают.

kpa9pt
22.09.2014, 20:55
Так в этом и проблема не выходит зациклить движение к точке, если я пишу например так:
while not PosInRange(x,y,z,100) do
begin
MoveTo(x,y,z);
end;
Тут PosInRange() возвратит true, если чар находится меньше чем за 100 пойнтов от точки и false, если дальше чем 100 пойнтов.
То клиент и пх зависают.

Если у тебя это в теле begin end. то конечно, там милион раз отправляет команду на движение. Поставь в таймер и проверку раз в 500мс

CoolNickname
22.09.2014, 22:57
Поставь в таймер и проверку раз в 500мс
Сори за тупой вопрос, а как правильно таймер сделать? а то у меня чет все равно зависает, когда делаю с таймером, может не правильно делаю просто)

kpa9pt
23.09.2014, 02:42
Сори за тупой вопрос, а как правильно таймер сделать? а то у меня чет все равно зависает, когда делаю с таймером, может не правильно делаю просто)

Я в таких случаях иду от противного комментирую строки кода до тех пор пока не найду ту из-за которой всё виснет.

Ну ты выложи весь код то, или покажи как таймер создаёшь, очень трудно дальше что-то сказать.

CoolNickname
24.09.2014, 00:29
Таймер делаю так:

var
timer:TTimer;
TimerStep:byte;
procedure Init; //Вызывается при включении скрипта
begin
TimerStep:=1;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=1000;
end;

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

procedure OnTimer; //<<--- изменено
begin
MoveTo(119670,-183560,-3313);
if PosInRange(119670,-183560,-3313,100) then timer.enabled:=false;
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
//ParseXYZ;
if FromClient and (ConnectName=Name)
and (pck[1]= #$56) and (pck[2]= #$1E) then
begin
timer.enabled:=true;//<<--- изменено
end;
end.


Вот, не понимаю, что не так Оо

//Breadfan: чуть подправил скрипт.

Добавлено через 14 часов 55 минут
//Breadfan: чуть подправил скрипт.
Целый час не мог понять почему все равно не работает, потом на форуме нашел это:
Такс, только что сделал у себя также, ммм таймер в порядке не работает отправка sendtoserver, я сделал sendtoserverex(name) где name имя персонажа тобишь героя на котором соединение, и заработало
И действительно, выходит таймер работает только через sendtoserverex(name)

Breadfan
24.09.2014, 01:38
ну функции MoveTo(119670,-183560,-3313);
if PosInRange(119670,-183560,-3313,100) then timer.enabled:=false; ты ведь и не показал. Кто ж знал чего там внутрях у них.

kpa9pt
24.09.2014, 02:31
Рад был помочь:)