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

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

Аватар пользователя
#2069
Рыцарь Бездны, почитай, если есть, скриптовое руководство. Последний параметр триггеров - это название функции, которая должна быть вызвана при срабатывании триггера. Чтобы его обнулить, нужно вместо названия вставить nil:
установка:
Trigger(REGION_ENTER_AND_STOP_TRIGGER,"reg_1","Question");
удаление:
Trigger(REGION_ENTER_AND_STOP_TRIGGER,"reg_1",nil);

Аналогичная ошибка в твоем первом примере с мессадж боксом
Аватар пользователя
#2071
Jack_of_shadows
Рыцарь Бездны, почитай, если есть, скриптовое руководство. Последний параметр триггеров - это название функции, которая должна быть вызвана при срабатывании триггера. Чтобы его обнулить, нужно вместо названия вставить nil:
установка:
Trigger(REGION_ENTER_AND_STOP_TRIGGER,"reg_1","Question");
удаление:
Trigger(REGION_ENTER_AND_STOP_TRIGGER,"reg_1",nil);

Аналогичная ошибка в твоем первом примере с мессадж боксом

Спасибо за указание на ошибки,учту).Видимо толи я невнимательно читал,толи мануал по тригерам на глаза непопадался... Незнал вобщем.

Но во втором случае тригер по прежнему нехочет обнуляться,постоянно требует деньги при проходе.Что только не пробовал,и после QuestionBox Trigger(REGION_ENTER_AND_STOP_TRIGGER,"reg_1",nil); вставлял,и в конец функции yes,и даже отдельный OBJECT_CAPTURE_TRIGGER пытался создать,чтобы при переходе "gar1" к первому игроку Trigger(REGION_ENTER_AND_STOP_TRIGGER,"reg_1",nil); вместе с этим OBJECT_CAPTURE_TRIGGER обнулялся,ничего не помогает...

Добавлено через 6 минут
Конечно есть вариант нажать отмена и спокойно пойти дальше,неплатя денег,но всеравно этот необнуляющийся тригер сильно мешает...
Аватар пользователя
#2072
Пользуй консоль, попробуй просто в ней набрать до захода в регион
@Trigger(REGION_ENTER_AND_STOP_TRIGGER,"reg_1",nil);
и проверить, что триггер не срабатывает. Возможно вылезет какая-нибудь ошибка, скажем из-за опечатки.
В ответ пользователю Jack_of_shadows
Аватар пользователя
#2073
Jack_of_shadows
Пользуй консоль, попробуй просто в ней набрать до захода в регион
@Trigger(REGION_ENTER_AND_STOP_TRIGGER,"reg_1",nil);
и проверить, что триггер не срабатывает. Возможно вылезет какая-нибудь ошибка, скажем из-за опечатки.

Спасибо вам большое за совет.Как ни странно ни консоль ни homm5 script editor не ругались но обнуление не работало,поставил после question box-а sleep(5) и после него обнуление и все заработало,хотя непонимаю зачем там был нужен sleep...

А еще можно вопросик?).Как сделать функцию,которая бы проверяла посещенность регионов игроком?.Ато не хочется для пяти регионов 5 разных заданий писать и через REGION_ENTER_AND_STOP_TRIGGER это все делать,хотелось бы все через одно задание сделать... Заранее огромное человеческое спасибо).
Аватар пользователя
#2074
Рыцарь Бездны, через дополнительные флаги. У себя я делал подобные вещи так (код не готовый, но позволяющий понять принцип):
-- таблица, хранящая имена регионов и флаги посещения
region_table =
{
{name = 'НАЗВАНИЕ_ПЕРВОГО_РЕГИОНА', visited = 0},
{name = 'НАЗВАНИЕ_ВТОРОГО_РЕГИОНА', visited = 0},
...
};

-- функция инициализации
function RegionInit()
for i, region in region_table do
Trigger(REGION_ENTER_AND_STOP_TRIGGER, region.name, 'RegionVisit');
end
end

-- единая функция посещения
function RegionVisit(hero)
-- проверям в каком мы регионе
for i, region in region_table do
if(IsObjectInRegion(hero, region.name)) then
Trigger(REGION_ENTER_AND_STOP_TRIGGER, region.name, nil);
region.visited = 1;
-- здесь можно сделать что нужно, в зависимости от номера региона (переменная i - номер в таблице region_table)
end
end
end

-- возвращает true, если регион с именем name посещен
function IsRegionVisited(name)
for i, region in region_table do
if((region.name == name) and (region.visited == 1)) then
return true
end
end
return nil
end
В ответ пользователю Jack_of_shadows
Аватар пользователя
#2075
Jack_of_shadows
Рыцарь Бездны, через дополнительные флаги. У себя я делал подобные вещи так (код не готовый, но позволяющий понять принцип):
-- таблица, хранящая имена регионов и флаги посещения
region_table =
{
{name = 'НАЗВАНИЕ_ПЕРВОГО_РЕГИОНА', visited = 0},
{name = 'НАЗВАНИЕ_ВТОРОГО_РЕГИОНА', visited = 0},
...
};

-- функция инициализации
function RegionInit()
for i, region in region_table do
Trigger(REGION_ENTER_AND_STOP_TRIGGER, region.name, 'RegionVisit');
end
end

-- единая функция посещения
function RegionVisit(hero)
-- проверям в каком мы регионе
for i, region in region_table do
if(IsObjectInRegion(hero, region.name)) then
Trigger(REGION_ENTER_AND_STOP_TRIGGER, region.name, nil);
region.visited = 1;
-- здесь можно сделать что нужно, в зависимости от номера региона (переменная i - номер в таблице region_table)
end
end
end

-- возвращает true, если регион с именем name посещен
function IsRegionVisited(name)
for i, region in region_table do
if((region.name == name) and (region.visited == 1)) then
return true
end
end
return nil
end

В жизни бы до такого недодумался,спасибо тебе нечеловеческое)

Я конечно извиняюсь,ну что поделаешь,такой вот я чайник... Самый последний вопрос.

Вобщем подскажи пожалуста,как сделать чтобы при посещении всех 5 регионов из таблицы выполнялось задание на посещение этих регионов?.Понимаю что это через NEW_DAY_TRIGGER и startThread нужно делать,но вот как это все реализовать мозгов нехватает...
Аватар пользователя
#2076
Рыцарь Бездны, логичнее всего наверное проверять это прямо в момент посещения, то есть добавить глобальную переменную, хранящую количество посещений:
region_visit_cnt = 0;
инкрементировать и проверять ее после строчки region.visited = 1;
region_visit_cnt = region_visit_cnt + 1;
if(region_visit_cnt >= 5) then
SetObjectiveState(ИМЯ_КВЕСТА, OBJECTIVE_COMPLETED);
end
Аватар пользователя
#2077
Jack_of_shadows Спасибо). А неподскажешь как в NEW_DAY_TRIGGER сделать так,чтобы событие происходило раз в две недели?.Раз в неделю и раз в месяц понимаю как,а чтоб раз в две недели я так понял формула какаято нужна,но вот какая...
Аватар пользователя
#2078
Автопереведено
mod(GetDate(), 14) == 1
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
#2079
Добрый день! Я совсем новичок, вообще не понимаю в скриптах ничего, по этому хотел бы узнать... Как сделать так, чтобы враги автоматически нападали на город? То есть, чтобы не брали ресурсы, не воевали с мобами и тд, а сразу шли на город.
В ответ пользователю Pert17
Аватар пользователя
#2080
Pert17
Добрый день! Я совсем новичок, вообще не понимаю в скриптах ничего, по этому хотел бы узнать... Как сделать так, чтобы враги автоматически нападали на город? То есть, чтобы не брали ресурсы, не воевали с мобами и тд, а сразу шли на город.

Ну есть несколько вариантов

Можно все ресурсы и мобов регионами закрасить,и запретить компьютеру в эти регионы наступать с помощью скрипта SetRegionBlocked,Это долго но 100% гарантия что он небудет эти ресурсы трогать,и ему не останется выбора,кроме как бежать на город.Но нет гарантии что он 100% побежит на город,если для него это будет слишком высокая опасность он просто будет стоять на месте или бегать по своей территории. Самый сомнительный вариант.

Можно на самой карте поставить героя,и через EnableHeroAl и MoveHero направить его на город.Вариант хороший,герой и ресурсы не будет собирать и на город нападет 100%,даже если у него всего 1 скелет в армии будет,но не универсальный,потому что после смерти второй раз этот герой уже не нападет. Хороший вариант если на старте карты нужно сделать нападение на свой город.

Можно поместить героя в резерв и через NewDayTrigger,EnableHeroAl и MoveHero сделать чтобы на ваш замок через определенный промежуток времени нападал этот зарезервированный герой врага (ну например каждую неделю нападать будет)
Плюсы : точно нападет на замок и не будет собирать ресурсы по дороге,универсальный вариант,после смерти героя через определенный промежуток времени нападение гарантированно повторится.
Минусы: нужно больше всего возится.

Вам какой вариант больше нравится?

Добавлено через 15 минут
RedHeavenHero
mod(GetDate(), 14) == 1

Спасибо большое.

А не подскажете еще:

1) Возможно ли сделать чтобы при снижении запаса маны героя ниже 10 игроку выдавалось поражение? (ну какбы герой некромант и чтобы свою жизнь потдерживать ему нужно 10 маны в наличии иметь,иначе он умрет). Просто в кампании за Илайю есть подобный скрипт чтобы при потере чёрного дракона выдавалось поражение,может и на снижение колличества маны можно так сделать...

2) Каким скриптом можно передать всё имушество AI под управление игрока?. Ну как в последней миссии за Фриду когда Дункана спасаешь всё имущество бирюзового к синему переходит.

Ато чтото в мануалах порылся но так ничего по этому вопросу не увидел. Заранее еще одно большое нечеловеческое спасибо)
В ответ пользователю Рыцарь Бездны
Аватар пользователя
#2081
1)
function CheckMana()
while GetHeroStat("имя_героя", STAT_MANA_POINTS) >= 10 do
sleep(5)
end
Loose()
end

startThread(CheckMana)
2) Можно посмотреть в самой карте. Там используются функции GetObjectNamesByType и SetObjectOwner.

Добавлено через 2 часа 37 минут
function change_all_owners()
local types = {'BUILDING', 'TOWN', 'HERO', 'DWELLING'}
for i, type in types do
for j, object in GetObjectNamesByType(type) do
if GetObjectOwner(object) == СТАРЫЙ_ВЛАДЕЛЕЦ then
SetObjectOwner(object, НОВЫЙ_ВЛАДЕЛЕЦ)
end
end
end
end
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
В ответ пользователю RedHeavenHero
Аватар пользователя
#2082
RedHeavenHero
1)
function CheckMana()
while GetHeroStat("имя_героя", STAT_MANA_POINTS) >= 10 do
sleep(5)
end
Loose()
end

startThread(CheckMana)
А если в бою уменьшится, а потом меткой нагонится?
Скрипт же не сработает вроде.
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

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

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
#2084
Рыцарь Бездны,
Вообще третий видимо лучше всего, но, я совсем не разбираюсь в скриптах, буквально на днях начал что-то делать с ними. Единственное, что я могу, это сделать скрипт с начальным капиталом игрока... Так что не могли бы Вы написать как именно будет выглядеть сам скрипт? Буду очень благодарен...

И ещё, такая штука... Если герой (вражеские тоже), находится без замка, то через неделю игрок терпит поражение. Нельзя ли как-нибудь убрать эту функцию? Чтобы не было миссии "Захватить любой город в течение недели".

Добавлено через 16 минут
И как сделать так, чтобы бот нападал на 2, 3, 4 и тд дни? То есть не сразу.

Статистика

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

Сейчас на сайте 6 пользователей 1516 гостей