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

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

Аватар пользователя
8 лет назад
ну тогда OBJECT_TOUCH_TRIGGER повесить на каждый двелл и проверять, кто коснулся. Если ваш герой, то выдать нужное сообщение, если комп, то, например, скриптом добавлять ему юнитов с двеллинга.
В ответ пользователю Gerter
Аватар пользователя
8 лет назад
я опять с вопросом: кто-нибудь знает как проверить изучение определённого заклинания, а то в документации я такого тригера не видел-
пример:
если герой изучил такое-то заклинание, то он получает +1 к колде
Аватар пользователя
8 лет назад
LetoX, триггера такого нет, но можно организовать поток, который будет постоянно проверять у героя наличие заклинания. Смотрите страницу-две назад примеры с потоками (функция startThread), только заменив условие на KnowHeroSpell(heroName, spell).
В ответ пользователю Jack_of_shadows
Аватар пользователя
8 лет назад
люди подскажите;) , в чём проблема: написал боевой скрипт для некроманта на каст массовых заклинаний тьмы в зависимости от уровня
function start()
lev = GetGameVar("level") + 0;
mana = GetUnitManaPoints(GetAttackerHero())
SetUnitManaPoints(GetAttackerHero(), 100);
if lev < 10 then
UnitCastGlobalSpell(GetAttackerHero(), 212)
elseif lev < 20 then
UnitCastGlobalSpell(GetAttackerHero(), 212)
UnitCastGlobalSpell(GetAttackerHero(), 215)
elseif lev < 30 then
UnitCastGlobalSpell(GetAttackerHero(), 212)
UnitCastGlobalSpell(GetAttackerHero(), 215)
UnitCastGlobalSpell(GetAttackerHero(), 210)
else
UnitCastGlobalSpell(GetAttackerHero(), 212)
UnitCastGlobalSpell(GetAttackerHero(), 215)
UnitCastGlobalSpell(GetAttackerHero(), 210)
UnitCastGlobalSpell(GetAttackerHero(), 213)
end
SetUnitManaPoints(GetAttackerHero(), mana);
end
в бою ничего не происходит(переменная задана, это проверено другим скриптом):confused:
Аватар пользователя
8 лет назад
банальный вариант - добавить sleep после SetUnitManaPoints(). ну и консоль ругается на что-нибудь?(думаю там должно быть что-то типа 'attacker-hero cant cast spell..')
В ответ пользователю Gerter
Аватар пользователя
8 лет назад
Консоль это вообще мой самый верный друг - она тупо не включается.:D Вроде в profiles написал нужную строчку(ctrl + C , ctrl + V), в input в моём профиле тоже написал show_console....... , однако консоль не включается, с ней конечно по проще
Аватар пользователя
8 лет назад
LetoX, возможные ошибки:
1. Функция start() кажется должна идти с большой буквы - Start(). Lua чувствителен к регистру.
2. Мана возможно не сразу будет дана герою, дождаться наверняка можно с помощью такой конструкции:
SetUnitManaPoints(GetAttackerHero(), 100);
repeat sleep() until(GetUnitManaPoints(GetAttackerHero()) == 100);
3. Функции каста заклинаний в некоторых случаях могут зафэйлить и скрипт вывалится в этом месте. Есть более безопасный вариант их запускать через отдельный поток:
startThread(UnitCastGlobalSpell, GetAttackerHero(), 212);
И ещё после функций каста и перед восстановлением прежней маны лучше поставить sleep(1), чтобы мана за каст успела отняться до её восстановления.
В ответ пользователю Jack_of_shadows
Аватар пользователя
8 лет назад
уже не знаю в чём проблема, пробовал простой скрипт на призыв существ числом уровень*2 - всё работает, вроде всё правильно , а ничего не происходит:(
function Start()
lev = GetGameVar("level") + 0;
mana = GetUnitManaPoints(GetAttackerHero())
SetUnitManaPoints(GetAttackerHero(), 100);
repeat sleep() until(GetUnitManaPoints(GetAttackerHero()) == 100);
if lev < 10 then
startThread(UnitCastGlobalSpell, GetAttackerHero(), 212);
elseif lev < 20 then
startThread(UnitCastGlobalSpell, GetAttackerHero(), 212);
startThread(UnitCastGlobalSpell, GetAttackerHero(), 215);
elseif lev < 30 then
startThread(UnitCastGlobalSpell, GetAttackerHero(), 212);
startThread(UnitCastGlobalSpell, GetAttackerHero(), 215);
startThread(UnitCastGlobalSpell, GetAttackerHero(), 210);
else
startThread(UnitCastGlobalSpell, GetAttackerHero(), 212);
startThread(UnitCastGlobalSpell, GetAttackerHero(), 215);
startThread(UnitCastGlobalSpell, GetAttackerHero(), 210);
startThread(UnitCastGlobalSpell, GetAttackerHero(), 213);
end
sleep(2);
SetUnitManaPoints(GetAttackerHero(), mana);
end
Аватар пользователя
8 лет назад
LetoX может вы в другом месте боевого скрипта ошибку допустили, и весь интерпретатор падает? Если есть рабочий вариант с другим заклинанием, и нерабочий текущий, попробуйте по чуть чуть переходить от одного к другому и смотреть на каком этапе перестанет работать.

Вот кусок моего похожего скрипта, который работает нормально:
player_hero = '';

function Start()

if(IsHuman(ATTACKER)) then
player_hero = GetAttackerHero();
else
player_hero = GetDefenderHero();
end

combatSetPause(not nil);

local last_mana = GetUnitManaPoints(player_hero);
SetUnitManaPoints(player_hero, 100);
repeat sleep() until(GetUnitManaPoints(player_hero) == 100);
startThread(UnitCastGlobalSpell, player_hero, SPELL_MASS_STONESKIN);
sleep(1);
SetUnitManaPoints(player_hero, last_mana);
repeat sleep() until(GetUnitManaPoints(player_hero) == last_mana);

setATB(player_hero, 0.5);
sleep(1);
combatSetPause(nil);

end
Аватар пользователя
8 лет назад
Такой вопрос. Хочу, чтобы герой Ласло бегал поочерёдно по трём точкам. После срабатывания триггера он сразу идёт к последней, там и отдыхает. Что поправить?
function Patrul ()
MoveHero("Laszlo", 197, 184, GROUND)
MoveHero("Laszlo", 159, 196, GROUND)
MoveHero("Laszlo", 156, 158, GROUND)
Trigger(OBJECT_CAPTURE_TRIGGER, "derevo1", nil)
end;

Trigger(OBJECT_CAPTURE_TRIGGER, "derevo1", "Patrul")
Аватар пользователя
8 лет назад
OrnsteinDragonslayer, команды должны выполняться не все сразу, а сначала идти в одну точку, дождаться когда герой дойдёт (проверяя его координаты или поставив в эту точку регион с триггером), только после этого отправлять во второую точку и так далее.
Аватар пользователя
8 лет назад
Проблема такова: хочу, чтобы квест "uderzhatG" активировался, после захвата города "gorodSvyat". Так же, если этот город принадлежит игроку 2, то тогда квест проваливался и игрок проигрывал миссию. Так же, после уничтожения героя "Nemor", квест выполняется. Но после того, как я добавляю в свой код функции ниже, то всё ломается и не триггериться (хотя начальные настройки выставляются). В чём проблема?

function uderzhat ()
SetObjectiveState("uderzhatG", OBJECTIVE_ACTIVE);
Trigger(OBJECT_CAPTURE_TRIGGER, "gorodSvyat", nil );
end;

Trigger(OBJECT_CAPTURE_TRIGGER, "gorodSvyat", "uderzhat" );

function CheckSvyat ()
while (1) do
sleep(2);
if GetObjectOwner("gorodSvyat")==PLAYER_2 then
sleep (2)
SetObjectiveState("uderzhatG", OBJECTIVE_FAILED);
sleep (15)
Loose ();
break
end;
end;
end;

startThread (CheckSvyat)

function UderzhatComplete ()
SetObjectiveState("uderzhatG", OBJECTIVE_COMPLETED);
Trigger (PLAYER_REMOVE_HERO_TRIGGER, "Nemor", nil)
end

Trigger (PLAYER_REMOVE_HERO_TRIGGER, "Nemor", "UderzhatComplete")
В ответ пользователю OrnsteinDragonslayer
8 лет назад
OrnsteinDragonslayer
Проблема такова: хочу, чтобы квест "uderzhatG" активировался, после захвата города "gorodSvyat". Так же, если этот город принадлежит игроку 2, то тогда квест проваливался и игрок проигрывал миссию. Так же, после уничтожения героя "Nemor", квест выполняется. Но после того, как я добавляю в свой код функции ниже, то всё ломается и не триггериться (хотя начальные настройки выставляются). В чём проблема?

function uderzhat ()
SetObjectiveState("uderzhatG", OBJECTIVE_ACTIVE);
Trigger(OBJECT_CAPTURE_TRIGGER, "gorodSvyat", nil );
end;

Trigger(OBJECT_CAPTURE_TRIGGER, "gorodSvyat", "uderzhat" );

function CheckSvyat ()
while (1) do
sleep(2);
if GetObjectOwner("gorodSvyat")==PLAYER_2 then
sleep (2)
SetObjectiveState("uderzhatG", OBJECTIVE_FAILED);
sleep (15)
Loose ();
break
end;
end;
end;

startThread (CheckSvyat)

function UderzhatComplete ()
SetObjectiveState("uderzhatG", OBJECTIVE_COMPLETED);
Trigger (PLAYER_REMOVE_HERO_TRIGGER, "Nemor", nil)
end

Trigger (PLAYER_REMOVE_HERO_TRIGGER, "Nemor", "UderzhatComplete")

Может буду не прав, но возможно поставить триггер: Trigger(OBJECT_CAPTURE_TRIGGER, "gorodSvyat", "CheckSvyat" );
В ответ пользователю Kartoha
Аватар пользователя
8 лет назад
Kartoha
Может буду не прав, но возможно поставить триггер: Trigger(OBJECT_CAPTURE_TRIGGER, "gorodSvyat", "CheckSvyat" );

Вместо старттреда или куда?

Статистика

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