Скрипты - Страница 137 - Форум HeroesWorld-а

Быстрая навигация по основным разделам форума:
Турниры
КАРТЫ
Heroes 6
Heroes 5
Heroes 4
Heroes 3
Heroes 2
Heroes 1
Might&Magic

Герои Меча и Магии 5 - Картостроительство (Редактор карт) В этом разделе можно обсуждать все что касается редактора карт для Heroes of Might and Magic V. Так же здесь обсуждаем картостроительство.

Ответ
Страница 137 из 237
 
Опции темы
#2041
Старый 11.09.2015, 18:32
  #2041
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 488
Выставка наград
Регистрация: 08.09.2013
Сообщения: 488
Выставка наград
По умолчанию
Re: Скрипты

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

Аналогичная ошибка в твоем первом примере с мессадж боксом
Jack_of_shadows вне форума
Ответить с цитированием
#2042
Старый 11.09.2015, 20:23
  #2042
^
Рыцарь Бездны
 
Аватар для Рыцарь Бездны
📖
Регистрация: 24.07.2012
Сообщения: 88
Регистрация: 24.07.2012
Сообщения: 88
По умолчанию
Re: Скрипты

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 минут
Конечно есть вариант нажать отмена и спокойно пойти дальше,неплатя денег,но всеравно этот необнуляющийся тригер сильно мешает...
Рыцарь Бездны вне форума
Ответить с цитированием
#2043
Старый 11.09.2015, 20:57
  #2043
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 488
Выставка наград
Регистрация: 08.09.2013
Сообщения: 488
Выставка наград
По умолчанию
Re: Скрипты

Пользуй консоль, попробуй просто в ней набрать до захода в регион
@Trigger(REGION_ENTER_AND_STOP_TRIGGER,"reg_1",nil);
и проверить, что триггер не срабатывает. Возможно вылезет какая-нибудь ошибка, скажем из-за опечатки.
Jack_of_shadows вне форума
Ответить с цитированием
#2044
Старый 13.09.2015, 10:15
  #2044
^
Рыцарь Бездны
 
Аватар для Рыцарь Бездны
📖
Регистрация: 24.07.2012
Сообщения: 88
Регистрация: 24.07.2012
Сообщения: 88
По умолчанию
Re: Скрипты

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 это все делать,хотелось бы все через одно задание сделать... Заранее огромное человеческое спасибо).
Рыцарь Бездны вне форума
Ответить с цитированием
#2045
Старый 13.09.2015, 11:37
  #2045
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 488
Выставка наград
Регистрация: 08.09.2013
Сообщения: 488
Выставка наград
По умолчанию
Re: Скрипты

Рыцарь Бездны, через дополнительные флаги. У себя я делал подобные вещи так (код не готовый, но позволяющий понять принцип):

	-- таблица, хранящая имена регионов и флаги посещения
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 вне форума
Ответить с цитированием
#2046
Старый 19.09.2015, 08:25
  #2046
^
Рыцарь Бездны
 
Аватар для Рыцарь Бездны
📖
Регистрация: 24.07.2012
Сообщения: 88
Регистрация: 24.07.2012
Сообщения: 88
По умолчанию
Re: Скрипты

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 нужно делать,но вот как это все реализовать мозгов нехватает...
Рыцарь Бездны вне форума
Ответить с цитированием
#2047
Старый 19.09.2015, 09:37
  #2047
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 488
Выставка наград
Регистрация: 08.09.2013
Сообщения: 488
Выставка наград
По умолчанию
Re: Скрипты

Рыцарь Бездны, логичнее всего наверное проверять это прямо в момент посещения, то есть добавить глобальную переменную, хранящую количество посещений:
	region_visit_cnt = 0;
инкрементировать и проверять ее после строчки region.visited = 1;
	region_visit_cnt = region_visit_cnt + 1;
if(region_visit_cnt >= 5) then
  SetObjectiveState(ИМЯ_КВЕСТА, OBJECTIVE_COMPLETED);
end
Jack_of_shadows вне форума
Ответить с цитированием
#2048
Старый 27.09.2015, 09:27
  #2048
^
Рыцарь Бездны
 
Аватар для Рыцарь Бездны
📖
Регистрация: 24.07.2012
Сообщения: 88
Регистрация: 24.07.2012
Сообщения: 88
По умолчанию
Re: Скрипты

Jack_of_shadows Спасибо). А неподскажешь как в NEW_DAY_TRIGGER сделать так,чтобы событие происходило раз в две недели?.Раз в неделю и раз в месяц понимаю как,а чтоб раз в две недели я так понял формула какаято нужна,но вот какая...
Рыцарь Бездны вне форума
Ответить с цитированием
#2049
Старый 27.09.2015, 11:53
  #2049
^
RedHeavenHero
 
Аватар для RedHeavenHero
📖
Регистрация: 10.02.2012
Сообщения: 2369
Выставка наград
Регистрация: 10.02.2012
Сообщения: 2369
Выставка наград
По умолчанию
Re: Скрипты

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

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

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
RedHeavenHero вне форума
Ответить с цитированием
#2050
Старый 09.10.2015, 18:24
  #2050
^
Pert17
📖
Регистрация: 09.10.2015
Сообщения: 2
Регистрация: 09.10.2015
Сообщения: 2
По умолчанию
Re: Скрипты

Добрый день! Я совсем новичок, вообще не понимаю в скриптах ничего, по этому хотел бы узнать... Как сделать так, чтобы враги автоматически нападали на город? То есть, чтобы не брали ресурсы, не воевали с мобами и тд, а сразу шли на город.
Pert17 вне форума
Ответить с цитированием
#2051
Старый 10.10.2015, 21:26
  #2051
^
Рыцарь Бездны
 
Аватар для Рыцарь Бездны
📖
Регистрация: 24.07.2012
Сообщения: 88
Регистрация: 24.07.2012
Сообщения: 88
По умолчанию
Re: Скрипты

Pert17Добрый день! Я совсем новичок, вообще не понимаю в скриптах ничего, по этому хотел бы узнать... Как сделать так, чтобы враги автоматически нападали на город? То есть, чтобы не брали ресурсы, не воевали с мобами и тд, а сразу шли на город.

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

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

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

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

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

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

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

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

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

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

Ато чтото в мануалах порылся но так ничего по этому вопросу не увидел. Заранее еще одно большое нечеловеческое спасибо)
Рыцарь Бездны вне форума
Ответить с цитированием
#2052
Старый 11.10.2015, 14:19
  #2052
^
RedHeavenHero
 
Аватар для RedHeavenHero
📖
Регистрация: 10.02.2012
Сообщения: 2369
Выставка наград
Регистрация: 10.02.2012
Сообщения: 2369
Выставка наград
По умолчанию
Re: Скрипты

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

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
RedHeavenHero вне форума
Ответить с цитированием
#2053
Старый 11.10.2015, 19:55
  #2053
^
Dyrman
 
Аватар для Dyrman
📖
Регистрация: 24.06.2008
Адрес: Там, где неба кончается край
Сообщения: 3479
Отправить сообщение для  Dyrman с помощью ICQ
Регистрация: 24.06.2008
Адрес: Там, где неба кончается край
Сообщения: 3479
Отправить сообщение для  Dyrman с помощью ICQ
По умолчанию
Re: Скрипты

RedHeavenHero1)
	function CheckMana()
    while GetHeroStat("имя_героя", STAT_MANA_POINTS) >= 10 do
        sleep(5)
    end
    Loose()
end

startThread(CheckMana)
А если в бою уменьшится, а потом меткой нагонится?
Скрипт же не сработает вроде.
Dyrman вне форума
Ответить с цитированием
#2054
Старый 11.10.2015, 20:15
  #2054
^
RedHeavenHero
 
Аватар для RedHeavenHero
📖
Регистрация: 10.02.2012
Сообщения: 2369
Выставка наград
Регистрация: 10.02.2012
Сообщения: 2369
Выставка наград
По умолчанию
Re: Скрипты

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

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

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
RedHeavenHero вне форума
Ответить с цитированием
#2055
Старый 11.10.2015, 21:51
  #2055
^
Pert17
📖
Регистрация: 09.10.2015
Сообщения: 2
Регистрация: 09.10.2015
Сообщения: 2
По умолчанию
Re: Скрипты

Рыцарь Бездны,
Вообще третий видимо лучше всего, но, я совсем не разбираюсь в скриптах, буквально на днях начал что-то делать с ними. Единственное, что я могу, это сделать скрипт с начальным капиталом игрока... Так что не могли бы Вы написать как именно будет выглядеть сам скрипт? Буду очень благодарен...

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

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


Опции темы



Часовой пояс GMT +4, время: 12:38.


vBulletin v3.5.0, Copyright ©2000-2021, Jelsoft Enterprises Ltd. (Русский)

Яндекс цитирование    Top.Mail.Ru