Рыцарь Бездны, почитай, если есть, скриптовое руководство. Последний параметр триггеров - это название функции, которая должна быть вызвана при срабатывании триггера. Чтобы его обнулить, нужно вместо названия вставить nil: установка: Trigger(REGION_ENTER_AND_STOP_TRIGGER,"reg_1","Question"); удаление: Trigger(REGION_ENTER_AND_STOP_TRIGGER,"reg_1",nil);
Аналогичная ошибка в твоем первом примере с мессадж боксом
Рыцарь Бездны, почитай, если есть, скриптовое руководство. Последний параметр триггеров - это название функции, которая должна быть вызвана при срабатывании триггера. Чтобы его обнулить, нужно вместо названия вставить 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 минут Конечно есть вариант нажать отмена и спокойно пойти дальше,неплатя денег,но всеравно этот необнуляющийся тригер сильно мешает...
Пользуй консоль, попробуй просто в ней набрать до захода в регион @Trigger(REGION_ENTER_AND_STOP_TRIGGER,"reg_1",nil); и проверить, что триггер не срабатывает. Возможно вылезет какая-нибудь ошибка, скажем из-за опечатки.
Пользуй консоль, попробуй просто в ней набрать до захода в регион @Trigger(REGION_ENTER_AND_STOP_TRIGGER,"reg_1",nil); и проверить, что триггер не срабатывает. Возможно вылезет какая-нибудь ошибка, скажем из-за опечатки.
Спасибо вам большое за совет.Как ни странно ни консоль ни homm5 script editor не ругались но обнуление не работало,поставил после question box-а sleep(5) и после него обнуление и все заработало,хотя непонимаю зачем там был нужен sleep...
А еще можно вопросик?).Как сделать функцию,которая бы проверяла посещенность регионов игроком?.Ато не хочется для пяти регионов 5 разных заданий писать и через REGION_ENTER_AND_STOP_TRIGGER это все делать,хотелось бы все через одно задание сделать... Заранее огромное человеческое спасибо).
Рыцарь Бездны, через дополнительные флаги. У себя я делал подобные вещи так (код не готовый, но позволяющий понять принцип):
-- таблица, хранящая имена регионов и флаги посещения 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
Рыцарь Бездны, через дополнительные флаги. У себя я делал подобные вещи так (код не готовый, но позволяющий понять принцип):
-- таблица, хранящая имена регионов и флаги посещения 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 нужно делать,но вот как это все реализовать мозгов нехватает...
Jack_of_shadows Спасибо). А неподскажешь как в NEW_DAY_TRIGGER сделать так,чтобы событие происходило раз в две недели?.Раз в неделю и раз в месяц понимаю как,а чтоб раз в две недели я так понял формула какаято нужна,но вот какая...
Добрый день! Я совсем новичок, вообще не понимаю в скриптах ничего, по этому хотел бы узнать... Как сделать так, чтобы враги автоматически нападали на город? То есть, чтобы не брали ресурсы, не воевали с мобами и тд, а сразу шли на город.
Добрый день! Я совсем новичок, вообще не понимаю в скриптах ничего, по этому хотел бы узнать... Как сделать так, чтобы враги автоматически нападали на город? То есть, чтобы не брали ресурсы, не воевали с мобами и тд, а сразу шли на город.
Ну есть несколько вариантов
Можно все ресурсы и мобов регионами закрасить,и запретить компьютеру в эти регионы наступать с помощью скрипта SetRegionBlocked,Это долго но 100% гарантия что он небудет эти ресурсы трогать,и ему не останется выбора,кроме как бежать на город.Но нет гарантии что он 100% побежит на город,если для него это будет слишком высокая опасность он просто будет стоять на месте или бегать по своей территории. Самый сомнительный вариант.
Можно на самой карте поставить героя,и через EnableHeroAl и MoveHero направить его на город.Вариант хороший,герой и ресурсы не будет собирать и на город нападет 100%,даже если у него всего 1 скелет в армии будет,но не универсальный,потому что после смерти второй раз этот герой уже не нападет. Хороший вариант если на старте карты нужно сделать нападение на свой город.
Можно поместить героя в резерв и через NewDayTrigger,EnableHeroAl и MoveHero сделать чтобы на ваш замок через определенный промежуток времени нападал этот зарезервированный герой врага (ну например каждую неделю нападать будет) Плюсы : точно нападет на замок и не будет собирать ресурсы по дороге,универсальный вариант,после смерти героя через определенный промежуток времени нападение гарантированно повторится. Минусы: нужно больше всего возится.
Вам какой вариант больше нравится?
Добавлено через 15 минут RedHeavenHero
mod(GetDate(), 14) == 1
Спасибо большое.
А не подскажете еще:
1) Возможно ли сделать чтобы при снижении запаса маны героя ниже 10 игроку выдавалось поражение? (ну какбы герой некромант и чтобы свою жизнь потдерживать ему нужно 10 маны в наличии иметь,иначе он умрет). Просто в кампании за Илайю есть подобный скрипт чтобы при потере чёрного дракона выдавалось поражение,может и на снижение колличества маны можно так сделать...
2) Каким скриптом можно передать всё имушество AI под управление игрока?. Ну как в последней миссии за Фриду когда Дункана спасаешь всё имущество бирюзового к синему переходит.
Ато чтото в мануалах порылся но так ничего по этому вопросу не увидел. Заранее еще одно большое нечеловеческое спасибо)
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
Рыцарь Бездны, Вообще третий видимо лучше всего, но, я совсем не разбираюсь в скриптах, буквально на днях начал что-то делать с ними. Единственное, что я могу, это сделать скрипт с начальным капиталом игрока... Так что не могли бы Вы написать как именно будет выглядеть сам скрипт? Буду очень благодарен...
И ещё, такая штука... Если герой (вражеские тоже), находится без замка, то через неделю игрок терпит поражение. Нельзя ли как-нибудь убрать эту функцию? Чтобы не было миссии "Захватить любой город в течение недели".
Добавлено через 16 минут И как сделать так, чтобы бот нападал на 2, 3, 4 и тд дни? То есть не сразу.