Просмотр полной версии : Тащить объект по маршруту
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 пойнтов.
То клиент и пх зависают.
Так в этом и проблема не выходит зациклить движение к точке, если я пишу например так:
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мс
Сори за тупой вопрос, а как правильно таймер сделать? а то у меня чет все равно зависает, когда делаю с таймером, может не правильно делаю просто)
Сори за тупой вопрос, а как правильно таймер сделать? а то у меня чет все равно зависает, когда делаю с таймером, может не правильно делаю просто)
Я в таких случаях иду от противного комментирую строки кода до тех пор пока не найду ту из-за которой всё виснет.
Ну ты выложи весь код то, или покажи как таймер создаёшь, очень трудно дальше что-то сказать.
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; ты ведь и не показал. Кто ж знал чего там внутрях у них.
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot