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

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

В ответ пользователю OrnsteinDragonslayer
OrnsteinDragonslayer
Никакую, всё чисто. Но методом проб и ошибок я узнал, что косячная функция - 3. Не так написал там триггер. Вроде всё окей.
Ну вот и отлично)
Аватар пользователя
function Turma ()
while (1) do
if b == 0 and w == 0 then
MessageBox("/Maps/SingleMissions/rework (4)/turmaLOCK.txt");
end
if b == 1 and w == 1 and var == 1 then
MessageBox("/Maps/SingleMissions/rework (4)/turmaUNLOCK.txt");
SetObjectiveState("suppDruid", OBJECTIVE_COMPLETE);
RemoveObject("druid");
RemoveObject("elf1");
RemoveObject("elf2");
RemoveObject("elf3");
RemoveObject("elf4");
RemoveObject("elf5");
RemoveObject("elf6");
RemoveObject("elf7");
RemoveObject("elf8");
MessageBox("/Maps/SingleMissions/rework (4)/unicorn.txt");
OpenCircleFog(198, 64, 0, 2, PLAYER_1)
MoveCamera(198, 64, 0, 30, 1.3, 1, 1, 1, 1);
sleep(5)
PlayObjectAnimation("unicorn", "happy", ONESHOT_STILL);
sleep(15)
RemoveObject("unicorn");
end
if b == 1 and w == 1 and a == 1 then
MessageBox("/Maps/SingleMissions/rework (4)/turmaDEAD.txt")
end
Trigger(OBJECT_TOUCH_TRIGGER, "turma");
break
end
end;

Trigger(OBJECT_TOUCH_TRIGGER, "turma", "Turma" );

Вопрос про многоусловонсть. Есть обьект "Turma". Нужно, чтобы при касании всплывало опред. сообщение, зависящее от условий приведённых в скрипте. У меня проблема такова, что при первом касании всё окей (первое условие, когда b and w == 0), а когда b == 1, w == 1, var == 1 выдаёт ошибку. Когда b == 1, w == 1, a == 1 тоже.
Вот ошибка

Условия, которые выставляют коэфф:
function QochComplete ()
while (1) do
sleep(2);
if (Exists('white') == nil) then
SetObjectiveState("Qo-ch", OBJECTIVE_COMPLETED);
w = 1
break
end
end
end

startThread(QochComplete)

function QobComplete ()
while (1) do
sleep (2)
if (Exists('black') == nil) then
SetObjectiveState("Qo-b", OBJECTIVE_COMPLETED);
b = 1
break
end
end
end

startThread(QobComplete)
Автор карт:
Долина расхитителей
Выбор мира
В ответ пользователю OrnsteinDragonslayer
Аватар пользователя
OrnsteinDragonslayer
function Turma ()
while (1) do
if b == 0 and w == 0 then
MessageBox("/Maps/SingleMissions/rework (4)/turmaLOCK.txt");
end
if b == 1 and w == 1 and var == 1 then
MessageBox("/Maps/SingleMissions/rework (4)/turmaUNLOCK.txt");
SetObjectiveState("suppDruid", OBJECTIVE_COMPLETE);
RemoveObject("druid");
RemoveObject("elf1");
RemoveObject("elf2");
RemoveObject("elf3");
RemoveObject("elf4");
RemoveObject("elf5");
RemoveObject("elf6");
RemoveObject("elf7");
RemoveObject("elf8");
MessageBox("/Maps/SingleMissions/rework (4)/unicorn.txt");
OpenCircleFog(198, 64, 0, 2, PLAYER_1)
MoveCamera(198, 64, 0, 30, 1.3, 1, 1, 1, 1);
sleep(5)
PlayObjectAnimation("unicorn", "happy", ONESHOT_STILL);
sleep(15)
RemoveObject("unicorn");
end
if b == 1 and w == 1 and a == 1 then
MessageBox("/Maps/SingleMissions/rework (4)/turmaDEAD.txt")
end
Trigger(OBJECT_TOUCH_TRIGGER, "turma");
break
end
end;

Trigger(OBJECT_TOUCH_TRIGGER, "turma", "Turma" );

Вопрос про многоусловонсть. Есть обьект "Turma". Нужно, чтобы при касании всплывало опред. сообщение, зависящее от условий приведённых в скрипте. У меня проблема такова, что при первом касании всё окей (первое условие, когда b and w == 0), а когда b == 1, w == 1, var == 1 выдаёт ошибку. Когда b == 1, w == 1, a == 1 тоже.
Вот ошибка

Условия, которые выставляют коэфф:
function QochComplete ()
while (1) do
sleep(2);
if (Exists('white') == nil) then
SetObjectiveState("Qo-ch", OBJECTIVE_COMPLETED);
w = 1
break
end
end
end

startThread(QochComplete)

function QobComplete ()
while (1) do
sleep (2)
if (Exists('black') == nil) then
SetObjectiveState("Qo-b", OBJECTIVE_COMPLETED);
b = 1
break
end
end
end

startThread(QobComplete)
GetHeroName - функция, вызвавшая ошибку - боевого скрипта, поэтому стоит искать ошибку в боевом скрипте.
Насчет самого скрипта: не ясно, зачем цикл, триггер написан неверно - нет имени функции или nil.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
В ответ пользователю RedHeavenHero
Аватар пользователя
RedHeavenHero
GetHeroName - функция, вызвавшая ошибку - боевого скрипта, поэтому стоит искать ошибку в боевом скрипте.
Насчет самого скрипта: не ясно, зачем цикл, триггер написан неверно - нет имени функции или nil.

Спасибо, пофиксил.
Автор карт:
Долина расхитителей
Выбор мира
Аватар пользователя
Хочу вызвать из резерва героя "Sarge", но консоль пишет ошибку, что герой не принадлежит ни к какому игроку. Собсна вопрос, почему он лучше других 10 зарезервированных героев?
Так же на всякий скину код, с которого он вызывается.

function TheEnd ()
while (1) do
sleep(2);
if (Exists("Zehir") == nil) and (Exists("Eruina") == nil) then
SuperTheEnd ()
break
end
end
end

function SuperTheEnd ()
DeployReserveHero("Sarge", 14, 134, GROUND)
sleep(2)
EnableHeroAI("Sarge", nil)
sleep(2)
StartAdvMapDialog(8)
sleep(25)
Win()
end

(разбил на 2 функции, потому что пытался хоть как-то починить и изменить код, чтобы работал. В итоге никак не работает, ни в одной функции, ни в двух).
Автор карт:
Долина расхитителей
Выбор мира
В ответ пользователю AstralLein
Аватар пользователя
AstralLein
Хм. Он у какого игрока в резерве находится? Вообще игра может тупить из-за числа зарезервированных героев у одного игрока.

Анрезерв лишних героев не спасает положение. Герой в резерве у игрока 2.
Автор карт:
Долина расхитителей
Выбор мира
Есть проблема: Эрлингу я задал идти в отчку 15, 9 и если он по какой-то причине не сможет туда пойти, тогда в 121,22, но если ему что-то мешает пройти, допустим герой с большой армией, тогда он просто убегает обратно. Как сделать так, чтобы он, несмотря ни на что, бежал в точку 15,9.
Функция написана через NEW_DAY_TRIGGER
if GetDate(DAY) ==  DayErlingAttack and ErlingAttack == 1 then
DeployReserveHero(Erling,RegionToPoint("Erling_deploy"))
sleep(5)
local x, y = 15, 9
if CanMoveHero(Erling,x,y,0) then
MoveHero(Erling, x, y,0)
elseif CanMoveHero(Erling,121,22) then
MoveHero(Erling, 121, 22,0)
end
startThread(ErlingUpgrade)
end
end
Аватар пользователя
во первых, стоит выключить AI у героя. во вторых, лучше сделать отдельную функцию, которая будет проверять, что наступил ход нужного игрока и запускать перемещение героя, т.к. триггер нового дня не совсем для этого подходит
Нет войне.
В ответ пользователю Gerter
Gerter
во первых, стоит выключить AI у героя. во вторых, лучше сделать отдельную функцию, которая будет проверять, что наступил ход нужного игрока и запускать перемещение героя, т.к. триггер нового дня не совсем для этого подходит

Все равно если ему что-то мешает пройти, он,теперь, будет стоять на месте. Функцию писал через startThread:
functionErlingMove()
local x, y = 15, 9
if CanMoveHero(Erling,x,y,0) then
MoveHero(Erling, x, y,0)
end
end
Аватар пользователя
мешает пройти = нужная клетка недоступна? тогда логично, что не двигается, нет?

попробуй что-то типа этого:
function ErlingMove()

while 1 do
if(GetCurrentPlayer() == 'номер игрока, которому принадлежит Эрлинг') then
if CanMoveHero(Erling, 15 , 9, 0) then
MoveHero(Erling, 15, 9, 0)
elseif CanMoveHero(Erling, 121, 22, 0) then
MoveHero(Erling, 121, 22,0)
end
end
sleep(2)
end
end
Нет войне.
В ответ пользователю Gerter
Gerter
мешает пройти = нужная клетка недоступна? тогда логично, что не двигается, нет?

попробуй что-то типа этого:
function ErlingMove()

while 1 do
if(GetCurrentPlayer() == 'номер игрока, которому принадлежит Эрлинг') then
if CanMoveHero(Erling, 15 , 9, 0) then
MoveHero(Erling, 15, 9, 0)
elseif CanMoveHero(Erling, 121, 22, 0) then
MoveHero(Erling, 121, 22,0)
end
end
sleep(2)
end
end

Если ему заградит путь мой герой, тогда он просто стоит на месте. Это единственная проблема. Попробовал твою функцию- проблем та же.

Статистика

Приветствуем новейшего участника: Вязов Анатолий Аркадьевич

Сейчас на сайте 9 пользователей 1420 гостей