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

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

Аватар пользователя
5 лет назад
Доброго времени суток
Очень рад, что вы работаете над картой! smile03 "Стариков" маловато в последнен время. К вопросу, нет, это невозможно. Хотя можно (теоретически) создать непроходимый объект статики с плотной-плотной моделью чёрного облака и создавать его в нужном месте.
В ответ пользователю }{0TT@6bI4
Аватар пользователя
5 лет назад
}{0TT@6bI4
Доброго времени суток
Очень рад, что вы работаете над картой! smile03 "Стариков" маловато в последнен время. К вопросу, нет, это невозможно. Хотя можно (теоретически) создать непроходимый объект статики с плотной-плотной моделью чёрного облака и создавать его в нужном месте.

Жаль, спасибо за ответ, нет это не вариант, для моей задумки это огромная нагрузка на карту, буду обходиться костылями)
Аватар пользователя
5 лет назад
Можно убрать стандартное открытие тумана и организовать обзор скриптом (с маленькой нагрузкой). Тогда можно будет вычислять, подходит ли герой к области нужного объекта, и в таком случае не открывать. То есть, обзор (наш, скриптовый) сделать 7 клеток, и если координаты героя меньше либо равны уравнению окружности вокруг обьекта + 8 клеток, то перестать открывать туман... Что-то вроде запретного города, радиусом 8 клеток. Не подойдет такой костыль?
Аватар пользователя
5 лет назад
Как идея норм, но не мой случай. Я примерно представляю что и как сделать, просто думал есть механизм нормальный для тумана войны, жаль разработчики не предусмотрели такую возможность
Аватар пользователя
5 лет назад
Доброго времени суток, давно не работал с боевыми скриптами, наклепал короткий и с виду простой код, но каст не отрабатывает, не могу понять почему (пробовал со всеми заклами света, работает только с регеном, в тьме только с замедлением, остальные тоже ругаются). Прошу помощи у знатоков. Пример ниже:
Заголовок
function Start()
local creaturesList = GetAttackerCreatures();
local manaSave = GetUnitManaPoints(GetAttackerHero());
sleep(5);
SetUnitManaPoints(GetAttackerHero(), 500);
for i, target in creaturesList do
UnitCastAimedSpell(GetAttackerHero(), SPELL_BLESS, target);
print("Unit"..GetAttackerHero().."casted".. SPELL_BLESS.." to target"..target);
end;
sleep(5);
SetUnitManaPoints(GetAttackerHero(), manaSave);
startThread(checkWinAttacker);
startThread(checkWinDefender);
sleep(5);
EnableAutoFinish(nil);
end;

function checkWinAttacker()
repeat sleep(1); until length(GetDefenderCreatures()) == 0;

sleep(30);
Finish(ATTACKER);
end;

function checkWinDefender()
repeat sleep(1); until length(GetAttackerCreatures()) == 0;

sleep(30);
Finish(DEFENDER);
end;
Аватар пользователя
5 лет назад
Почему бы не упростить скрипт и не воспользоваться масскастами? UnitCastGlobalSpell(GetAttackerHero(), SPELL_MASS_BLESS).
function Start()
local mana = GetUnitManaPoints(GetAttackerHero())
SetUnitManaPoints(GetAttackerHero(), 200)
sleep(1)
UnitCastGlobalSpell(GetAttackerHero(), SPELL_MASS_BLESS)
sleep(1)
end

В вашем скрипте, вероятно, не хватает sleep-ов внутри цикла for; всё-таки время выполнения у функций каста есть и заметное.

Аватар пользователя
5 лет назад
Проблема прежняя
Вложения 1
1 файл • Общий размер: 3,6 KB
В ответ пользователю }{0TT@6bI4
Аватар пользователя
5 лет назад
}{0TT@6bI4
Почему бы не упростить скрипт и не воспользоваться масскастами? UnitCastGlobalSpell(GetAttackerHero(), SPELL_MASS_BLESS).
function Start()
local mana = GetUnitManaPoints(GetAttackerHero())
SetUnitManaPoints(GetAttackerHero(), 200)
sleep(1)
UnitCastGlobalSpell(GetAttackerHero(), SPELL_MASS_BLESS)
sleep(1)
end

В вашем скрипте, вероятно, не хватает sleep-ов внутри цикла for; всё-таки время выполнения у функций каста есть и заметное.

Не смогу упростить, т.к. битва проходит между героем и армией нейтралов, потому каст бафов нейтралам приходится производить от лица героя
Аватар пользователя
5 лет назад
Но наш герой не может накинуть то же ускорение на соперника! Это противоречит игровой логике.
В ответ пользователю KioM
Аватар пользователя
5 лет назад
KioM
Проблема прежняя
Ошибка утверждает, что кастовать пытался герой защищающихся, а его нет. Вероятно, это вызвано как раз попыткой накинуть баф на врага
Аватар пользователя
5 лет назад
Получается нужно эмулировать каст мобам?

Другой вопрос, можно ли как-то кастовать мобом скажем ускор, на экспертном уровне без редактирования самого моба? Онли скриптом
В ответ пользователю KioM
Аватар пользователя
5 лет назад
KioM
Получается нужно эмулировать каст мобам?

Другой вопрос, можно ли как-то кастовать мобом скажем ускор, на экспертном уровне без редактирования самого моба? Онли скриптом
нет, если у существа явно не прописано заклинание, то оно будет кастовать его на продвинутом уровне. Если мне нужно кастануть спелл существом на каком-то специальном уровне/специальных условиях, я использую скрытых существ, которым явно прописаны заклинания. В бою вызываю скрытое существо -> кастую -> убираю существо. При такой схеме, появление существа остается незаметным. Пример кода(рабочий пример из NHF):
  -- призыв
AddCreature(side, HELPER, 30, -1, -1, nil, 'fiona_sorrow_helper')
while not exist('fiona_sorrow_helper') do
sleep()
end
-- каст
for creature, _ in enemy_stacks_to_sorrow do
pcall(UnitCastAimedSpell, 'fiona_sorrow_helper', SPELL_SORROW, creature)
end
-- удаление существа
removeUnit('fiona_sorrow_helper')
while exist('fiona_sorrow_helper') do
sleep()
end
Аватар пользователя
5 лет назад
Нет. Можно создать специального моба со всеми заклинаниями на нужных уровнях, вызывать его, кастовать им что-то (на своих) и удалять. Это реализовано, например, в карте Проклятый
Аватар пользователя
5 лет назад
Gerter, }{0TT@6bI4, Спасибо, буду разбираться.
В ответ пользователю Florkingold
Аватар пользователя
5 лет назад
Не знаю спрашивали ли до меня об этом, но все же. Как сделать так, чтобы при входе в регион диалога он проигрывался лишь один раз и при повторном входе в этот регион, диалог больше не открывался?

Статистика

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

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