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

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

Аватар пользователя

function visit_crypt(hero)
QuestionBox(GetMapDataPath() .. 'visit_crypt.txt', 'crypt_ok', 'crypt_cancel')
end

Trigger(4, 'crypt', 'visit_crypt')

function crypt_ok() -- функция вызывается в случае нажатия игроком кнопки ОК
-- ...
end

function crypt_cancel() -- функция вызывается в случае нажатия игроком кнопки Отмена
-- ...
end


Добавлено через 15 минут
Можно сделать ещё такую функцию, которая будет сразу возвращать сам ответ игрока, а не вызывать другую функцию. По-моему, это несколько удобнее.

function QuestionBoxRef(msg)
question_box_ref_answer = -1
QuestionBox(msg, "question_box_ref_answer=1 --", "question_box_ref_answer=0 --")
while question_box_ref_answer == -1 do
sleep()
end
return question_box_ref_answer == 1
end

-- пример использования

function visit_crypt(hero)
if QuestionBoxRef(GetMapDataPath() .. 'visit_crypt.txt') then
-- игрок согласен
else
-- игрок отказал
end
end

Trigger(4, 'crypt', 'visit_crypt')

Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
Привет, напишите пожалуйста все задания которые можно задавать обычным путём на скриптах. Ато я чёт не разбираюсь в тех, там не понятно. Или если у кого есть, то дайте мануальчик по заданиям
Аватар пользователя
Ну типо обыкновенние задания, которые можно задавать в редакторе.
Ну и ладно с этим, может подскажешь где найти мануал по заданиям?
Аватар пользователя
Есть ли функция, позволяющая вернуть отвагу и настроение монстра на карте?
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

Карты для HeroesV:
Путешествие , Условие крови , Рука судьбы.Часть 1: В поход , Рука судьбы.Часть 2: Отчаянье , Рука судьбы.Часть 3: Восхождение , Стойкость
Абсолютная власть , Иду на Вы! , Корона Ургаша , На задворках
Мир надо уничтожить... Чтобы создать свой...
Аватар пользователя
Нет такой. Ее можно эмулировать для одной отдельно взятой карты, если обработать map.xdb.

Добавлено через 1 минуту
Какова цель? Может быть, найдется и другое решение.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
В ответ пользователю RedHeavenHero
Аватар пользователя
RedHeavenHero
Нет такой. Ее можно эмулировать для одной отдельно взятой карты, если обработать map.xdb.

Добавлено через 1 минуту
Какова цель? Может быть, найдется и другое решение.

Хотел спецу для героя сделать, которая настроение враждебного моба при нападении на него улучшало в сторону присоединения.
Пока сделал просто процент выпадения дружелюбного настроения (без учёта того, что было) - тоже ничего вышло.
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

Карты для HeroesV:
Путешествие , Условие крови , Рука судьбы.Часть 1: В поход , Рука судьбы.Часть 2: Отчаянье , Рука судьбы.Часть 3: Восхождение , Стойкость
Абсолютная власть , Иду на Вы! , Корона Ургаша , На задворках
Мир надо уничтожить... Чтобы создать свой...
Граждане товарищи господа и дамы, нужна ваша помощь.

Уже не первый год мучаюсь с одним из скриптов на карте, который никак не даёт покоя. Здесь его полный код:
EnableHeroAI('Bersy',nil)
EnableHeroAI('Ingvar', nil)
EnableHeroAI('Vegeyr', nil)
DoNotGiveTurnToPlayerAIIfNoTownsAndActiveHeroes(PLAYER_3,true)


function Mystery_of_mount()
Trigger(OBJECT_TOUCH_TRIGGER, 'Thanes', nil)
MessageBox(dir..'dialog_1.txt')
sleep(5)
SetObjectEnabled('Thanes', true)
sleep(5)
MakeHeroInteractWithObject('Giovanni', 'Thanes')
sleep(3)
if IsObjectExists('Thanes') == not nil then
RemoveObject('Thanes')
sleep(3)
startThread(Thanes_2)
else startThread(Thanes_2)
end;
end;
Trigger(OBJECT_TOUCH_TRIGGER, 'Thanes', 'Mystery_of_mount')

function Thanes_2()
if IsObjectExists('Thanes') == nil then
MessageBox(dir..'dialog_2.txt')
sleep(5)
SetObjectiveState('Thun', OBJECTIVE_COMPLETED)
if GetTownHero('Shagarakti') == 'OrnellaNecro' then
flag = 1;
else TeachHeroSpell('OrnellaNecro',SPELL_TOWN_PORTAL)
SetObjectPosition('OrnellaNecro',28,34,0)
flag = 1;
flag3 = GetDate(DAY)
flag4 = flag3 + 3;
print('flag3')
print('flag4')
flag5 = flag3 + 7;
print('flag3')
print('flag5')
flag6 = flag3 + 14;
print('flag3')
print('flag6')
end;
end;
end;

function Attack_1()
if GetDate(DAY) == flag3 + 3 then
SetObjectPosition('Bersy',28,36,0,4)
SetAIHeroAttractor('Shagarakti','Bersy',2)
AddObjectCreatures('Garrison',40,18 +(flag2*5),7)
AddObjectCreatures('Garrison',42,5 +(flag2*5),6)
EnableHeroAI('Bersy',true)
end;
end;
Trigger(NEW_DAY_TRIGGER,'Attack_1')

function Attack_2()
if GetDate(DAY) == flag3 + 7 then
SetObjectPosition('Vegeyr',28,34,0,4)
SetAIHeroAttractor('Shagarakti','Vegeyr',2)
AddObjectCreatures('Shagarakti',40, 16 + (3*flag2))
AddObjectCreatures('Shagarakti',36, 50 +(10*flag2))
EnableHeroAI('Vegeyr',true)
end;
end;
Trigger(NEW_DAY_TRIGGER,'Attack_2')

function Attack_3()
if GetDate(DAY) == flag3 + 14 then
SetObjectPoistion('Ingvar',28,34,0,4)
SetAIHeroAttractor('Shagarakti','Ingvar',2)
TeachHeroSpell('OrnellaNecro',SPELL_SUMMON_HIVE)
AddObjectCreatures('Shagarakti',36, 30 + (flag2*10))
EnableHeroAI('Ingvar',true)
end;
sleep(1)
end;
Trigger(NEW_DAY_TRIGGER,'Attack_3')

function Attack_finished()
while 1 do
if IsHeroAlive('Ingvar') == nil then
MessageBox(dir..'fu.txt')
end;
sleep(1)
end;
end;
startThread(Attack_finished)

Суть его в чём. Даётся квест на уничтожение группы танов. После его выполнения через определённое количество времени герои, ранее дезактивированные, должны появиться в определённой точке и атаковать город игрока. Этого, однако, не происходит - карта либо зависает, либо продолжает работу в штатном режиме, но герои как не появились, так и не появляются. Версия игры 3.1, что на чистой ничего не работает, что с модами. Вопрос, уважаемые знатоки: где косяк?
Мои карты:
SinglePlayer: Выбор Зехира
Падение Стедвика(pre-release)
Готовится: Зима Титанов, Столетняя война
Аватар пользователя
Сразу вижу 2 ошибки:
1. Несколько установлений триггеров и, как следствие, он будет работать только на последнюю функцию. Attack_1(2,3) нужно объединить в одну функцию.
2. Пропущен break в функции Attack_finished, поэтому сообщения о смерти Ингвара будут показываться бесконечно, что может привести к зависанию.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Благодарю. Исправил, карта ушла обратно в тест, а я - глядеть, смог ли что исправить
Мои карты:
SinglePlayer: Выбор Зехира
Падение Стедвика(pre-release)
Готовится: Зима Титанов, Столетняя война
Аватар пользователя
Есть функция StartCombat, которая запускает функцию в конце боя. Эта функция передаёт героя и результат сражения этого героя. Как в передаваемые параметры добавить ещё несколько значений?
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

Карты для HeroesV:
Путешествие , Условие крови , Рука судьбы.Часть 1: В поход , Рука судьбы.Часть 2: Отчаянье , Рука судьбы.Часть 3: Восхождение , Стойкость
Абсолютная власть , Иду на Вы! , Корона Ургаша , На задворках
Мир надо уничтожить... Чтобы создать свой...
В ответ пользователю Dyrman
Аватар пользователя
Dyrman
Есть функция StartCombat, которая запускает функцию в конце боя. Эта функция передаёт героя и результат сражения этого героя. Как в передаваемые параметры добавить ещё несколько значений?
Можно переопределить саму функцию так, чтобы она сама возвращала результат сражения:
local wrapStartCombat = StartCombat
function StartCombat(hero, enemy, stacks, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18)
%wrapStartCombat(hero, enemy, stacks, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18)
local combat_index = GetLastSavedCombatIndex()
while GetLastSavedCombatIndex() == combat_index do
sleep()
end
local result = IsHeroAlive(hero)
return result
end
Тогда можно не передавать управление в другую функцию, а продолжить выполнение текущей.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
В ответ пользователю RedHeavenHero
Аватар пользователя
RedHeavenHero
Можно переопределить саму функцию так, чтобы она сама возвращала результат сражения:
local wrapStartCombat = StartCombat
function StartCombat(hero, enemy, stacks, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18)
%wrapStartCombat(hero, enemy, stacks, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18)
local combat_index = GetLastSavedCombatIndex()
while GetLastSavedCombatIndex() == combat_index do
sleep()
end
local result = IsHeroAlive(hero)
return result
end
Тогда можно не передавать управление в другую функцию, а продолжить выполнение текущей.
Хитро )) Спасибо. Напомни, плиз, какое преимущество даёт использование % перед переменной?
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

Карты для HeroesV:
Путешествие , Условие крови , Рука судьбы.Часть 1: В поход , Рука судьбы.Часть 2: Отчаянье , Рука судьбы.Часть 3: Восхождение , Стойкость
Абсолютная власть , Иду на Вы! , Корона Ургаша , На задворках
Мир надо уничтожить... Чтобы создать свой...
Аватар пользователя
% всегда нужно ставить перед внешними локальными переменными.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
Жалко, что пользовательский редактор скриптов ругается на %.
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

Карты для HeroesV:
Путешествие , Условие крови , Рука судьбы.Часть 1: В поход , Рука судьбы.Часть 2: Отчаянье , Рука судьбы.Часть 3: Восхождение , Стойкость
Абсолютная власть , Иду на Вы! , Корона Ургаша , На задворках
Мир надо уничтожить... Чтобы создать свой...

Статистика

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