Скрипты для начинающих - Страница 18 - Форум HeroesWorld-а

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

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

Ответ
Страница 18 из 24
 
Опции темы
#256
Старый 05.03.2022, 19:12
  #256
^
Kragh
 
Аватар для Kragh
📖
Регистрация: 26.01.2022
Сообщения: 8
Регистрация: 26.01.2022
Сообщения: 8
По умолчанию
Re: Скрипты для начинающих

Всем привет. Может кто поможет со скриптом, все рудники дают ресы только если в их (гарнизоне - внутри рудника, шахты) находятся опр. кол. например юнитов первого уровня. 
Kragh вне форума
Ответить с цитированием
#257
Старый 28.04.2022, 01:08
  #257
^
sspi
📖
Регистрация: 28.04.2022
Сообщения: 2
Регистрация: 28.04.2022
Сообщения: 2
По умолчанию
Re: Скрипты для начинающих

Сердечные мои! А не найдется ли у кого пары минут на помощь?
Пытаюсь сделать скрипт на удвоение армии. За основу стырил скрипт из "Random Wars".
Вот это работает, но для одного героя
function incom()
local day = GetDate(3)
if day == 2 then
        local hero = GetPlayerHeroes(5)[0]
        local types = {}
        types[0], types[1], types[2], types[3], types[4], types[5],types[6] = GetHeroCreaturesTypes(hero)
        for i = 0, 6 do
        if HasHeroCreature(hero, types[i])
        then
                --local stack = GetCreatureById(types[i])
                local amount = GetHeroCreatures(hero, types[i])
                AddHeroCreatures(hero, types[i], amount, i)
            end
        end
    end
end

Trigger(NEW_DAY_TRIGGER, "incom")


Жажду же я воплотить схему с несколькими героями, но не знаю как правильно это прописать.
Не работает
function incom()
local day = GetDate(3)
if day == 2 then
    local hero = {}
    hero[0], hero[1], hero[2], hero[3] = GetPlayerHeroes(5)
    for k = 0, 3 do
    if IsHeroAlive(hero)
    then
        local types = {}
        types[0], types[1], types[2], types[3], types[4], types[5],types[6] = GetHeroCreaturesTypes(hero)
        for i = 0, 6 do
        if HasHeroCreature(hero, types[i])
        then
                local stack = GetCreatureById(types[i])
                local amount = GetHeroCreatures(hero, types[i])
                AddHeroCreatures(hero, types[i], amount, i)
                end
                end
            end
        end
    end
end

Trigger(NEW_DAY_TRIGGER, "incom")

На функции IsHeroAlive(hero) появляется неверный аргумент №1, т.е. вместо hero появляется нечто несъедобное.
sspi вне форума
Ответить с цитированием
#258
Старый 28.04.2022, 08:03
  #258
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1756
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1756
Выставка наград
По умолчанию
Re: Скрипты для начинающих

Дело в том, что функция GetPlayerHeroes сама возвращает массив, поэтому значение полей массива heroes со 2 по 5 — nil, а первое — table. То же самое относится и к самой таблице "hero", поэтому в вашем случае и IsHeroAlive(hero) и IsHeroAlive(hero[k]) будут ломаться — с указанной вами ошибкой.
Поэтому нужно в локальный массив heroes скинуть таблицу из функции GetPlayerHeroes, потом пройтись по массиву с указанными действиями и всё.
function incom()
local day = GetDate(3)
if day == 2 then
    local heroes = GetPlayerHeroes(5)
    for k, hero in heroes do
    if IsHeroAlive(hero)
    then
        local types = {}
        types[0], types[1], types[2], types[3], types[4], types[5],types[6] = GetHeroCreaturesTypes(hero)
        for i = 0, 6 do
        if HasHeroCreature(hero, types[i])
        then
                local stack = GetCreatureById(types[i]) --Если вы копировали из RW, то, надеюсь, скопировали и функцию GetCreatureByld.
                local amount = GetHeroCreatures(hero, types[i])
                AddHeroCreatures(hero, types[i], amount, i)
                end
                end
            end
        end
    end
end

Trigger(NEW_DAY_TRIGGER, "incom")
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#259
Старый 28.04.2022, 18:38
  #259
^
sspi
📖
Регистрация: 28.04.2022
Сообщения: 2
Регистрация: 28.04.2022
Сообщения: 2
По умолчанию
Re: Скрипты для начинающих

  Низкий поклон Вам, Мудрейший Кудесник! Без готового скрипта я бы ничего не понял, ибо неуч.
И да, функции есть, но local stack я аннулировал (закомментил?) за ненадобностью.
sspi вне форума
Ответить с цитированием
#260
Старый 28.04.2022, 18:58
  #260
^
Jewily
 
Аватар для Jewily
📖
Регистрация: 25.09.2016
Сообщения: 140
Jewily#4267
Регистрация: 25.09.2016
Сообщения: 140
Jewily#4267
По умолчанию
Re: Скрипты для начинающих

sspi  Низкий поклон Вам, Мудрейший Кудесник! Без готового скрипта я бы ничего не понял, ибо неуч.
И да, функции есть, но local stack я аннулировал (закомментил?) за ненадобностью.
Советую вам перейти по ссылке в подписи уважаемого Кудесника, в разделе Файлы оной содержится бесценная библиотека Скриптовых (и не только) Искусств, за авторством Хоттабыча и других Атлантов картостроения.
__________________




Не уходи безропотно во тьму,
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!

Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.




                                                                                       




Не уходи безропотно во тьму,
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!

Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.




                                                                                       
Jewily вне форума
Ответить с цитированием
#261
Старый 06.06.2022, 04:43
  #261
^
Andy2266
📖
Регистрация: 06.06.2021
Сообщения: 2
Регистрация: 06.06.2021
Сообщения: 2
По умолчанию
Re: Скрипты для начинающих

Здравствуйте! Может ли кто-то подсказать, как сделать скрипт для того, чтобы на определенный день строилась будка существ определенного уровня в городе, если ранее эта постройка была запрещена. (т.е. например существ 7го уровня построить нельзя в городе, но через 2 недели становится можно, будка строится автоматически или постройка становится доступна) если такие можно сделать, конечно. Спасибо. сорри я ничего не понимаю в скриптах...
В моем случае чтобы через 14 дней появилась возможность построить Титанов в Академии, при том, что ранее существ 7го уровня построить было нельзя.
P.S. прошу прощения за свой нубский вопрос, но я пересмотрела все предыдущие страницы и такого вопроса  и скрипта не нашла.
Andy2266 вне форума
Ответить с цитированием
#262
Старый 06.06.2022, 07:58
  #262
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1756
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1756
Выставка наград
По умолчанию
Re: Скрипты для начинающих

function NewDay()
if GetDate(DAY) == 14 then
  UpgradeTownBuilding("Город", TOWN_BUILDING_DWELLING_7, уровень) --0— не построен, 1 — отстроен, 2 — улучшен
end
end

Trigger(NEW_DAY_TRIGGER, "NewDay")
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#263
Старый 06.06.2022, 15:16
  #263
^
Andy2266
📖
Регистрация: 06.06.2021
Сообщения: 2
Регистрация: 06.06.2021
Сообщения: 2
По умолчанию
Re: Скрипты для начинающих

}{0TT@6bI4
function NewDay()
if GetDate(DAY) == 14 then
  UpgradeTownBuilding("Город", TOWN_BUILDING_DWELLING_7, уровень) --0— не построен, 1 — отстроен, 2 — улучшен
end
end

Trigger(NEW_DAY_TRIGGER, "NewDay")

Огромное Вам спасибо, шеф)!
Andy2266 вне форума
Ответить с цитированием
#264
Старый 03.09.2022, 20:14
  #264
^
BlueHeavenHero
 
Аватар для BlueHeavenHero
📖
Регистрация: 20.08.2022
Адрес: "Асхан/Священная Империя Единорога/Светлолесье"
Сообщения: 145
Регистрация: 20.08.2022
Адрес: "Асхан/Священная Империя Единорога/Светлолесье"
Сообщения: 145
По умолчанию
Re: Скрипты для начинающих

Доброго времени суток! Может ли кто подсказать такой скрипт, чтобы при захвате города Heaven этот самый город удалялся и вместо него появлялся разрушенный город?
BlueHeavenHero вне форума
Ответить с цитированием
#265
Старый 04.09.2022, 00:07
  #265
^
Andrei_21
 
Аватар для Andrei_21
📖
Регистрация: 14.03.2021
Сообщения: 206
Andrei_21#1931
Выставка наград
Регистрация: 14.03.2021
Сообщения: 206
Andrei_21#1931
Выставка наград
По умолчанию
Re: Скрипты для начинающих

BlueHeavenHeroДоброго времени суток! Может ли кто подсказать такой скрипт, чтобы при захвате города Heaven этот самый город удалялся и вместо него появлялся разрушенный город?
 Есть скриптовая команда RazeTown("скриптовое имя города"). С её помощью можно по дефолту разрушать замки людей и демонов. С замками остальных рас надо чуть подшаманить.
__________________

Сценарий:
"Наследие прошлого"
Кампании:
"
Новый порядок",  "Серый Альянс" 
Руководство "Создание пользовательской кампании"

Трейлер к кампании "Поиски Истины": https://youtu.be/RDqq1dAW6sw

Сценарий:
"Наследие прошлого"
Кампании:
"
Новый порядок",  "Серый Альянс" 
Руководство "Создание пользовательской кампании"

Трейлер к кампании "Поиски Истины": https://youtu.be/RDqq1dAW6sw
Andrei_21 вне форума
Ответить с цитированием
#266
Старый 04.09.2022, 11:44
  #266
^
BlueHeavenHero
 
Аватар для BlueHeavenHero
📖
Регистрация: 20.08.2022
Адрес: "Асхан/Священная Империя Единорога/Светлолесье"
Сообщения: 145
Регистрация: 20.08.2022
Адрес: "Асхан/Священная Империя Единорога/Светлолесье"
Сообщения: 145
По умолчанию
Re: Скрипты для начинающих

Andrei_21 Есть скриптовая команда RazeTown("скриптовое имя города"). С её помощью можно по дефолту разрушать замки людей и демонов. С замками остальных рас надо чуть подшаманить.
Можете разъяснить? Просто я порылся в файлах игры и нашел этот скрипт, но, к сожалению, ничего не понял.
Заранее спасибо
BlueHeavenHero вне форума
Ответить с цитированием
#267
Старый 04.09.2022, 15:19
  #267
^
Andrei_21
 
Аватар для Andrei_21
📖
Регистрация: 14.03.2021
Сообщения: 206
Andrei_21#1931
Выставка наград
Регистрация: 14.03.2021
Сообщения: 206
Andrei_21#1931
Выставка наград
По умолчанию
Re: Скрипты для начинающих

function CaptureTown()
RazeTown('ваше имя города')
end

Trigger(OBJECT_CAPTURE_TRIGGER, 'ваше имя города', 'CaptureTown')

Все просто: даете в редакторе карт скриптовое имя городу, после в редакторе скриптов пишите что-то вроде такой функции.
__________________

Сценарий:
"Наследие прошлого"
Кампании:
"
Новый порядок",  "Серый Альянс" 
Руководство "Создание пользовательской кампании"

Трейлер к кампании "Поиски Истины": https://youtu.be/RDqq1dAW6sw

Сценарий:
"Наследие прошлого"
Кампании:
"
Новый порядок",  "Серый Альянс" 
Руководство "Создание пользовательской кампании"

Трейлер к кампании "Поиски Истины": https://youtu.be/RDqq1dAW6sw
Andrei_21 вне форума
Ответить с цитированием
#268
Старый 09.09.2022, 16:32
  #268
^
BlueHeavenHero
 
Аватар для BlueHeavenHero
📖
Регистрация: 20.08.2022
Адрес: "Асхан/Священная Империя Единорога/Светлолесье"
Сообщения: 145
Регистрация: 20.08.2022
Адрес: "Асхан/Священная Империя Единорога/Светлолесье"
Сообщения: 145
По умолчанию
Re: Скрипты для начинающих

Может ли кто разъяснить мне, как использовать скрипт SetObjectiveState? Многие говорили использовать его, когда я спрашивал, как сделать объект, дающий задание.
Желательно с примерами, а то я мало что пойму без них.
BlueHeavenHero вне форума
Ответить с цитированием
#269
Старый 09.09.2022, 17:44
  #269
^
Григорий Ковалев
 
Аватар для Григорий Ковалев
📖
Регистрация: 16.08.2021
Адрес: Крестьянские хижины
Сообщения: 80
Регистрация: 16.08.2021
Адрес: Крестьянские хижины
Сообщения: 80
По умолчанию
Re: Скрипты для начинающих

BlueHeavenHeroМожет ли кто разъяснить мне, как использовать скрипт SetObjectiveState? Многие говорили использовать его, когда я спрашивал, как сделать объект, дающий задание.
Желательно с примерами, а то я мало что пойму без них.
SetObjectiveState изменяет состояние задания с именем objectiveName для определенного игрока. Для заданий принадлежащих конкретному игроку параметр playerID игнорируется. Для общих заданий, если параметр playerID задан, он указывает для какого игрока нужно изменить состояние задания, в противном случае — меняется состояние задания для первого игрока. 

Грубо говоря, скрипт активирует задание, выполняет/проваливает его. 

SetObjectiveState("prim1", OBJECTIVE_ACTIVE) -- первый параметр имя задания, второй - статус.
function PRIM3_COMPL()
Trigger(REGION_ENTER_AND_STOP_TRIGGER, '4', nil)
    if GetCurrentPlayer()==1 then
SetObjectiveState("prim3", OBJECTIVE_COMPLETED)  -- тоже самое, только статус задания другой.
print("32")
      end
           end
           
           
Trigger(REGION_ENTER_AND_STOP_TRIGGER, '4', 'PRIM3_COMPL')


__________________
На дальней станции сойду...
Трава по пояс,
Зайду в траву, как в море босиком...
На дальней станции сойду...
Трава по пояс,
Зайду в траву, как в море босиком...
Григорий Ковалев вне форума
Ответить с цитированием
#270
Старый 10.09.2022, 11:18
  #270
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 177
Регистрация: 24.04.2016
Сообщения: 177
По умолчанию
Re: Скрипты для начинающих

BlueHeavenHero

OBJECTIVE_ACTIVE - сделать задание активным, т.е. задание можно выполнить и оно станет отображаться для игрока(ков)

OBJECTIVE_COMPLETED - выполнить задание

OBJECTIVE_FAILED - провалить задание

Для разных ситуаций ещё используется статус OBJECTIVE_UNKNOWN. В основном для функции GetObjectiveState, чтобы проверить не выдавалось ли ещё наше задание, иначе говоря не стоит ли у него один из ранее упомянутых статусов.

p.s. Так же могу добавить, что можно в кости "CanUncomplete" заданий поставить вариант "true", и тогда можно будет перезапускать квесты, т.е. выполненные квесты делать снова активными.

Азгалор вне форума
Ответить с цитированием
Ответ
Страница 18 из 24


Опции темы



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


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

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