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

Сообщения от Скрипты для начинающих

Аватар пользователя
Всем привет. Может кто поможет со скриптом, все рудники дают ресы только если в их (гарнизоне - внутри рудника, шахты) находятся опр. кол. например юнитов первого уровня. 
Сердечные мои! А не найдется ли у кого пары минут на помощь?
Пытаюсь сделать скрипт на удвоение армии. За основу стырил скрипт из "Random Wars".
[spoiler=Вот это работает, но для одного героя]
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)
        then
                --local stack = GetCreatureById(types)
                local amount = GetHeroCreatures(hero, types)
                AddHeroCreatures(hero, types, amount, i)
            end
        end
    end
end

Trigger(NEW_DAY_TRIGGER, "incom")
[/spoiler]

Жажду же я воплотить схему с несколькими героями, но не знаю как правильно это прописать.
[spoiler=Не работает]
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)
        then
                local stack = GetCreatureById(types)
                local amount = GetHeroCreatures(hero, types)
                AddHeroCreatures(hero, types, amount, i)
                end
                end
            end
        end
    end
end

Trigger(NEW_DAY_TRIGGER, "incom")
[/spoiler]
На функции IsHeroAlive(hero) появляется неверный аргумент №1, т.е. вместо hero появляется нечто несъедобное.
Аватар пользователя
Дело в том, что функция 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)
then
local stack = GetCreatureById(types) --Если вы копировали из RW, то, надеюсь, скопировали и функцию GetCreatureByld.
local amount = GetHeroCreatures(hero, types)
AddHeroCreatures(hero, types, amount, i)
end
end
end
end
end
end

Trigger(NEW_DAY_TRIGGER, "incom")
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
В ответ пользователю }{0TT@6bI4
  Низкий поклон Вам, Мудрейший Кудесник! Без готового скрипта я бы ничего не понял, ибо неуч.
И да, функции есть, но local stack я аннулировал (закомментил?) за ненадобностью.
В ответ пользователю sspi
Аватар пользователя
sspi
  Низкий поклон Вам, Мудрейший Кудесник! Без готового скрипта я бы ничего не понял, ибо неуч.
И да, функции есть, но local stack я аннулировал (закомментил?) за ненадобностью.
Советую вам перейти по ссылке в подписи уважаемого Кудесника, в разделе Файлы оной содержится бесценная библиотека Скриптовых (и не только) Искусств, за авторством Хоттабыча и других Атлантов картостроения.


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

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


                                                                                       
Здравствуйте! Может ли кто-то подсказать, как сделать скрипт для того, чтобы на определенный день строилась будка существ определенного уровня в городе, если ранее эта постройка была запрещена. (т.е. например существ 7го уровня построить нельзя в городе, но через 2 недели становится можно, будка строится автоматически или постройка становится доступна) если такие можно сделать, конечно. Спасибо. сорри я ничего не понимаю в скриптах...
В моем случае чтобы через 14 дней появилась возможность построить Титанов в Академии, при том, что ранее существ 7го уровня построить было нельзя.
P.S. прошу прощения за свой нубский вопрос, но я пересмотрела все предыдущие страницы и такого вопроса  и скрипта не нашла.
Аватар пользователя
function NewDay()
if GetDate(DAY) == 14 then
UpgradeTownBuilding("Город", TOWN_BUILDING_DWELLING_7, уровень) --0— не построен, 1 — отстроен, 2 — улучшен
end
end

Trigger(NEW_DAY_TRIGGER, "NewDay")
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
В ответ пользователю }{0TT@6bI4
}{0TT@6bI4
function NewDay()
if GetDate(DAY) == 14 then
UpgradeTownBuilding("Город", TOWN_BUILDING_DWELLING_7, уровень) --0— не построен, 1 — отстроен, 2 — улучшен
end
end

Trigger(NEW_DAY_TRIGGER, "NewDay")
Огромное Вам спасибо, шеф)!
Аватар пользователя
Доброго времени суток! Может ли кто подсказать такой скрипт, чтобы при захвате города Heaven этот самый город удалялся и вместо него появлялся разрушенный город?
В ответ пользователю BlueHeavenHero
Аватар пользователя
BlueHeavenHero
Доброго времени суток! Может ли кто подсказать такой скрипт, чтобы при захвате города Heaven этот самый город удалялся и вместо него появлялся разрушенный город?
 Есть скриптовая команда RazeTown("скриптовое имя города"). С её помощью можно по дефолту разрушать замки людей и демонов. С замками остальных рас надо чуть подшаманить.
Сценарий: "Наследие прошлого"
Кампании:
"
Новый порядок", "Серый Альянс""Поиски Истины"

Трейлер №2 кампании "Дыхание Пустоты": https://www.youtube.com/watch?v=XkHKXk5BctA&ab_channel=%D0%90ndrei_21

В ответ пользователю Andrei_21
Аватар пользователя
Andrei_21
Есть скриптовая команда RazeTown("скриптовое имя города"). С её помощью можно по дефолту разрушать замки людей и демонов. С замками остальных рас надо чуть подшаманить.
Можете разъяснить? Просто я порылся в файлах игры и нашел этот скрипт, но, к сожалению, ничего не понял.
Заранее спасибо
Аватар пользователя
function CaptureTown()
RazeTown('ваше имя города')
end

Trigger(OBJECT_CAPTURE_TRIGGER, 'ваше имя города', 'CaptureTown')
Все просто: даете в редакторе карт скриптовое имя городу, после в редакторе скриптов пишите что-то вроде такой функции.
Сценарий: "Наследие прошлого"
Кампании:
"
Новый порядок", "Серый Альянс""Поиски Истины"

Трейлер №2 кампании "Дыхание Пустоты": https://www.youtube.com/watch?v=XkHKXk5BctA&ab_channel=%D0%90ndrei_21

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

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')

На дальней станции сойду...
Трава по пояс,
Зайду в траву, как в море босиком...
Аватар пользователя

BlueHeavenHero

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

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

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

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

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

Статистика

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

Сейчас на сайте 7 пользователей 1388 гостей