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

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

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

точнее, как то так
if(CanMoveHero(Erling, 15, 9, 0)) then
MoveHero(Erling, 15, 9, 0)
else
MoveHeroRealTime(Erling, 15, 9, 0)
end
Нет войне.
В ответ пользователю Gerter
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 это точка входа в замок, возможно это поможет.
Аватар пользователя
Можно делать кучу MoveHero по одному шагу, с проверкой успешности. Координаты шагов -- в массив.
 

К А
Стикеры GBF в Telegram
В ответ пользователю Ment
Ment
Можно делать кучу MoveHero по одному шагу, с проверкой успешности. Координаты шагов -- в массив.
Можно поподробнее, пожалуйста.
Аватар пользователя
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

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

К А
Стикеры GBF в Telegram
В ответ пользователю Ment
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
Аватар пользователя
Ах, ну да.
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 надо передавать размер массива координат.
 

К А
Стикеры GBF в Telegram
Эх, к сожалению, проблема та же: если в точке 15,8 стоит герой, Эрлинг будет стоять там где и остановился.
Аватар пользователя
ну если только в этой точке проблема, то можно просто в нее двигать, если нужная недоступна
Нет войне.
В ответ пользователю Gerter
Gerter
ну если только в этой точке проблема, то можно просто в нее двигать, если нужная недоступна
А есть команда, проверяющая находиться ли герой на той точке?
Аватар пользователя
через GetObjectPosition() либо просто двигать героя в эту точку, если CanHeroMove не выполнилось
Нет войне.
Появился еще вопрос: если во время действия фукции MoveHeroRealTime герой не дойдет до точки, он со следующего хода продолжит идти туда?
Аватар пользователя
MoveHeroRealTime двигает героя независимо от хода, даже во время хода противника может.
Так что ответ -- нет, если функция до конца по какой-то причине не отработает, то всё.
 

К А
Стикеры GBF в Telegram

Статистика

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