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

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

В ответ пользователю Haw3k
Аватар пользователя
Haw3k
Привет, скажите пожалуйста а можно ли скриптами заблокировать возможность получить определенный навык или два при взятии навыка?

Скриптом нельзя, только делать мод.
Мои карты: Белый Храм, Поменяться местами, Судьба королевства, Стихийные острова.
В ответ пользователю }{0TT@6bI4
Аватар пользователя
Всех с наступившим новым годом. В процессе создания специализации "герой учит заклинания магии тьмы с повышением своего уровня" столкнулся с проблемой, что если героя нанять в таверне, а не выбрать на старте, его специализация работать не будет. Может надо что-то добавить в код?
function IsoldaS()
local hero="Isolda"
local lvl=GetHeroLevel("Isolda")
if lvl == 3 then
TeachHeroSpell(hero, 12)
elseif lvl == 5 then
TeachHeroSpell(hero, 11)
elseif lvl == 8 then
TeachHeroSpell(hero, 15)
elseif lvl == 10 then
TeachHeroSpell(hero, 14)
elseif lvl == 15 then
TeachHeroSpell(hero, 13)
elseif lvl == 18 then
TeachHeroSpell(hero, 17)
elseif lvl == 20 then
TeachHeroSpell(hero, 18)
elseif lvl == 23 then
TeachHeroSpell(hero, 212)
elseif lvl == 25 then
TeachHeroSpell(hero, 210)
elseif lvl == 28 then
TeachHeroSpell(hero, 215)
elseif lvl == 30 then
TeachHeroSpell(hero, 214)
elseif lvl == 33 then
TeachHeroSpell(hero, 211)
elseif lvl == 35 then
TeachHeroSpell(hero, 213)
elseif lvl == 38 then
TeachHeroSpell(hero, 21)
elseif lvl == 40 then
TeachHeroSpell(hero, 20)
end
end

Trigger(HERO_LEVELUP_TRIGGER, "Isolda", "IsoldaS")
Модификация "New Era": 2%
Аватар пользователя

Ваш код выполняется только на старте карты. Соответственно, вам нужно вешать триггер не только на старте, но и по появлении героя:

function UpdateHeroSpecs(hero)
if hero == 'Isolda' then
Trigger(HERO_LEVELUP_TRIGGER, hero, 'IsoldaSpec')
elseif hero == 'AnotherHero' then
--...
else
--...
end
end

for pl = PLAYER_1, PLAYER_8 do
if GetPlayerState(pl) == PLAYER_ACTIVE then
Trigger(PLAYER_ADD_HERO_TRIGGER, pl, 'UpdateHeroSpecs')
end
end
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
В ответ пользователю }{0TT@6bI4
Аватар пользователя
и опять я не так что-то сделал
function IsoldaSpec()
local hero="Isolda"
local lvl=GetHeroLevel("Isolda")
if lvl == 3 then
TeachHeroSpell(hero, 12)
elseif lvl == 5 then
TeachHeroSpell(hero, 11)
elseif lvl == 8 then
TeachHeroSpell(hero, 15)
elseif lvl == 10 then
TeachHeroSpell(hero, 14)
elseif lvl == 15 then
TeachHeroSpell(hero, 13)
elseif lvl == 18 then
TeachHeroSpell(hero, 17)
elseif lvl == 20 then
TeachHeroSpell(hero, 18)
elseif lvl == 22 then
TeachHeroSpell(hero, SPELL_BLIND)
elseif lvl == 23 then
TeachHeroSpell(hero, 212)
elseif lvl == 25 then
TeachHeroSpell(hero, 210)
elseif lvl == 28 then
TeachHeroSpell(hero, 215)
elseif lvl == 30 then
TeachHeroSpell(hero, 214)
elseif lvl == 33 then
TeachHeroSpell(hero, 211)
elseif lvl == 35 then
TeachHeroSpell(hero, 213)
elseif lvl == 38 then
TeachHeroSpell(hero, 21)
elseif lvl == 40 then
TeachHeroSpell(hero, 20)
end
end

function UpdateHeroSpecs(hero)
if hero == 'Isolda' then
Trigger(HERO_LEVELUP_TRIGGER, hero, 'IsoldaSpec')
end
end

for pl = PLAYER_1, PLAYER_8 do
if GetPlayerState(pl) == PLAYER_ACTIVE then
Trigger(PLAYER_ADD_HERO_TRIGGER, pl, 'UpdateHeroSpecs')
end
end
Модификация "New Era": 2%
Аватар пользователя
А что не работает, что пишет консоль?) Визуально я очевидных ошибок не вижу, но, возможно, это просто половина двенадцатого ночи 😁
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
В ответ пользователю }{0TT@6bI4
Аватар пользователя
}{0TT@6bI4
А что не работает, что пишет консоль?) Визуально я очевидных ошибок не вижу, но, возможно, это просто половина двенадцатого ночи 😁
Заклинание НЕ выдаётся
Модификация "New Era": 2%
Аватар пользователя
Не выдаётся на старте или при найме героя?)
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
В ответ пользователю }{0TT@6bI4
Аватар пользователя
}{0TT@6bI4
Не выдаётся на старте или при найме героя?)
В обоих случаях.
Модификация "New Era": 2%
Аватар пользователя
Приветствую! А был ли у кого код на дополнительный бафф баффающим объектам? Например, хочется мне объекту Разорванный флаг(даёт бонусы на боевой дух и удачу на 1 бой) дать ещё какой-то бонус, ну скажем бафф к скорости. Естественно, бафф будет работать так же как и оригинальный, т.е. через GiveHeroBattleBonus(). Будет вешаться всем кто коснётся объекта, и не выдастся повторно до тех пор пока герой не сразится с кем-нибудь. Пока что есть мысль написать код, который будет заносить в список всех кто трогает объект, и добавлять им метку типа allow_touch = 0(если 0, то баффа при повторном касании не будет), а потом в функции из COMBAT_RESULTS_TRIGGER отслеживать кто бой завершил, и если это один из наших посетителей - выдавать ему разрешение(0 на 1 менять) на повторный забафф от флага. Но может быть есть вариант попроще?)

Всякое/карты:

Добавление недостающей музыки гномам

В ответ пользователю Азгалор
Аватар пользователя
Азгалор
Приветствую! А был ли у кого код на дополнительный бафф баффающим объектам? Например, хочется мне объекту Разорванный флаг(даёт бонусы на боевой дух и удачу на 1 бой) дать ещё какой-то бонус, ну скажем бафф к скорости. Естественно, бафф будет работать так же как и оригинальный, т.е. через GiveHeroBattleBonus(). Будет вешаться всем кто коснётся объекта, и не выдастся повторно до тех пор пока герой не сразится с кем-нибудь. Пока что есть мысль написать код, который будет заносить в список всех кто трогает объект, и добавлять им метку типа allow_touch = 0(если 0, то баффа при повторном касании не будет), а потом в функции из COMBAT_RESULTS_TRIGGER отслеживать кто бой завершил, и если это один из наших посетителей - выдавать ему разрешение(0 на 1 менять) на повторный забафф от флага. Но может быть есть вариант попроще?)
Писал код на изменённый поиск пути: за каждую единицу удачи 10% шанс получить двойной бонус с баффов. 
    arrayBuffTouched = {[1] = {0,0,0,0,0,0,0,0},
                        [2] = {0,0,0,0,0,0,0,0},
                        [3] = {0,0,0,0,0,0,0,0},
                        [4] = {0,0,0,0,0,0,0,0}}
allFreeBuffs = {1,2,3,4,5,2,6,1,3,1,4,5,7,6}
for i = 1,14 do
    Trigger(OBJECT_TOUCH_TRIGGER,"Buff"..i,"TouchBuff")
end
function TouchBuff(hero,obj)
    local i = GetObjectOwner(hero)
    for j = 1,14 do
        if obj == "Buff"..j then
            if arrayBuffTouched[allFreeBuffs[j]] == 0 then
                HasFortunateAdventurer(i,obj)
                arrayBuffTouched[allFreeBuffs[j]] = 1
            end
        end
    end
end
function HasFortunateAdventurer(i,obj)
    if HasHeroSkill(heroT,33) == not nil and random(10)+1 <= GetHeroStat(heroT,5) then
        local bufftype = 0
        for j = 1,14 do
            if obj == "Buff"..j then
                bufftype = j
            end
        end
        if allFreeBuffs[bufftype] == 1 then
            GiveHeroBattleBonus(heroT,1,1)--morale
            GiveHeroBattleBonus(heroT,0,1)--luck
        elseif allFreeBuffs[bufftype] == 2 then
            if GetDate(DAY_OF_WEEK) == 7 then
                GiveHeroBattleBonus(heroT,1,2)--morale
            else
                GiveHeroBattleBonus(heroT,1,1)--morale
            end
        elseif allFreeBuffs[bufftype] == 3 then
            if GetDate(DAY_OF_WEEK) == 7 then
                GiveHeroBattleBonus(heroT,1,1)--morale
                GiveHeroBattleBonus(heroT,0,1)--luck
            elseif GetDate(DAY_OF_WEEK) == 1 or GetDate(DAY_OF_WEEK) == 3 or GetDate(DAY_OF_WEEK) == 5 then
                GiveHeroBattleBonus(heroT,0,1)--luck
            else
                GiveHeroBattleBonus(heroT,1,1)--morale
            end
        elseif allFreeBuffs[bufftype] == 5 then
            if GetDate(DAY_OF_WEEK) == 1 then
                GiveHeroBattleBonus(heroT,2,3)--offence
            elseif GetDate(DAY_OF_WEEK) == 2 then
                GiveHeroBattleBonus(heroT,1,1)--morale
            elseif GetDate(DAY_OF_WEEK) == 3 then
                GiveHeroBattleBonus(heroT,3,3)--defence
            elseif GetDate(DAY_OF_WEEK) == 4 then
                GiveHeroBattleBonus(heroT,0,1)--luck
            elseif GetDate(DAY_OF_WEEK) == 5 then
                GiveHeroBattleBonus(heroT,5,1)--initiative
            elseif GetDate(DAY_OF_WEEK) == 6 then
                GiveHeroBattleBonus(heroT,2,2)--offence
                GiveHeroBattleBonus(heroT,3,2)--defence
            elseif GetDate(DAY_OF_WEEK) == 7 then
                GiveHeroBattleBonus(heroT,6,1)--speed
            end
        elseif allFreeBuffs[bufftype] == 6 then
            GiveHeroBattleBonus(heroT,1,1)--morale
        elseif allFreeBuffs[bufftype] == 7 then
            if GetDate(DAY_OF_WEEK) == 7 then
                GiveHeroBattleBonus(heroT,0,2)--luck
            else
                GiveHeroBattleBonus(heroT,0,1)--luck
            end
        end
    end
end

и обновлять после боя 
arrayBuffTouched= {0,0,0,0,0,0,0,0}

Мои карты: Белый Храм, Поменяться местами, Судьба королевства, Стихийные острова.
Аватар пользователя
Уважаемые, есть код:
-- Pyramid
function golemhouse()
StartDialogScene("/DialogScenes/DefiantMage/S1/DialogScene.xdb#xpointer(/DialogScene)");
MessageBox(quest1);
SetObjectiveState("sec1", OBJECTIVE_ACTIVE, p1);
local gems = GetPlayerResource(p1, GEM)
if gremlins >= 1000 and gems >= 100 then
QuestionBox(pyramidpath, "yes", "no");
end
end
Trigger(OBJECT_TOUCH_TRIGGER, golem, "golemhouse")
function yes()
RemoveHeroCreatures(hero, CREATURE_GREMLIN, 1000);
SetPlayerResource(p1, GEM, gems - 100);
end
function no()
print("cancel")
end
Как сделать так, чтобы при взаимодействии с объектом кат-сцена и сообщение выводились 1 раз, а проверка на выполнение требований была постоянной?

Статистика

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