Перейти к содержанию

Сообщения от Скрипты

Аватар пользователя
8 лет назад
еще раз, герой преграждает единственно возможный путь к нужной клетке? тогда все работает согласно механике, CanHeroMove считает героя непроходимым препятствием. можно добавить проверку на такую ситуацию и если она возникает, двигать Эрлинга в местоположение вашего героя, например
В ответ пользователю Gerter
8 лет назад
Gerter
еще раз, герой преграждает единственно возможный путь к нужной клетке?
Да, но в других сценариях также написано просто MoveHero(…), и герой идет туда, даже если ему преграждает путь другой герой с бешеной армией.
Gerter
тогда все работает согласно механике, CanHeroMove считает героя непроходимым препятствием. можно добавить проверку на такую ситуацию и если она возникает, двигать Эрлинга в местоположение вашего героя, например
Даже не представляю как это написать :confused:
Аватар пользователя
8 лет назад
попробуй заменить MoveHero на MoveHeroRealTime, и проверку CanHeroMove убрать

точнее, как то так
if(CanMoveHero(Erling, 15, 9, 0)) then
MoveHero(Erling, 15, 9, 0)
else
MoveHeroRealTime(Erling, 15, 9, 0)
end
В ответ пользователю Gerter
8 лет назад
Gerter
попробуй заменить MoveHero на MoveHeroRealTime, и проверку CanHeroMove убрать

точнее, как то так
if(CanMoveHero(Erling, 15, 9, 0)) then
MoveHero(Erling, 15, 9, 0)
else
MoveHeroRealTime(Erling, 15, 9, 0)
end

Не, не подойдет. У меня задание на оборону замка, поэтому MoveHeroRealTime не подойдет. 15,9 это точка входа в замок, возможно это поможет.
Аватар пользователя
8 лет назад
Можно делать кучу MoveHero по одному шагу, с проверкой успешности. Координаты шагов -- в массив.
В ответ пользователю Ment
8 лет назад
Ment
Можно делать кучу MoveHero по одному шагу, с проверкой успешности. Координаты шагов -- в массив.
Можно поподробнее, пожалуйста.
Аватар пользователя
8 лет назад
x={15,16,17,18}
y={9,9,10,10}
for i=1 to n
if IsHeroAlive("Erling") then
MoveHero("Erling",x,y,0)
end
end

Так, условно говоря. На самом деле тут вижу тут пару слабых мест в коде (например, в случае сражения и победы в нём Эрлинг скорее всего не продолжит движение, так как пока бой шёл скрипт уже успел отработать), но логика в целом такая.
В ответ пользователю Ment
8 лет назад
Ment
x={15,16,17,18}
y={9,9,10,10}
for i=1 to n
if IsHeroAlive("Erling") then
MoveHero("Erling",x,y,0)
end
end

Так, условно говоря. На самом деле тут вижу тут пару слабых мест в коде (например, в случае сражения и победы в нём Эрлинг скорее всего не продолжит движение, так как пока бой шёл скрипт уже успел отработать), но логика в целом такая.

Консоль выдает ошибку(см. скриншот). Вот код:

x={15,16,17,18}
y={9,9,10,10}
for i=1,n do
if IsHeroAlive(Erling) then
MoveHero(Erling,x,y,0)
end
end
Вложения 1
1 файл • Общий размер: 26,3 KB
Аватар пользователя
8 лет назад
Ах, ну да.
x={15,16,17,18}
y={9,9,10,10}
n=4
for i=1,n do
if IsHeroAlive(Erling) then
MoveHero(Erling,x,y,0)
end
end
В n надо передавать размер массива координат.
8 лет назад
Эх, к сожалению, проблема та же: если в точке 15,8 стоит герой, Эрлинг будет стоять там где и остановился.
Аватар пользователя
8 лет назад
ну если только в этой точке проблема, то можно просто в нее двигать, если нужная недоступна
В ответ пользователю Gerter
8 лет назад
Gerter
ну если только в этой точке проблема, то можно просто в нее двигать, если нужная недоступна
А есть команда, проверяющая находиться ли герой на той точке?
Аватар пользователя
8 лет назад
через GetObjectPosition() либо просто двигать героя в эту точку, если CanHeroMove не выполнилось
8 лет назад
Появился еще вопрос: если во время действия фукции MoveHeroRealTime герой не дойдет до точки, он со следующего хода продолжит идти туда?
Аватар пользователя
8 лет назад
MoveHeroRealTime двигает героя независимо от хода, даже во время хода противника может.
Так что ответ -- нет, если функция до конца по какой-то причине не отработает, то всё.

Статистика

Приветствуем новейшего участника: recijeb

Сейчас на сайте 8 пользователей 1253 гостей