Форум HeroesWorld-а - Показать сообщение отдельно - Скрипты
Тема: Скрипты
Показать сообщение отдельно
#4002
Старый 04.02.2026, 02:31
  #4002
^
Долгий
 
Аватар для Долгий
📖
Регистрация: 23.04.2019
Сообщения: 112
Регистрация: 23.04.2019
Сообщения: 112
По умолчанию
Re: Скрипты

АзгалорПриветствую! А был ли у кого код на дополнительный бафф баффающим объектам? Например, хочется мне объекту Разорванный флаг(даёт бонусы на боевой дух и удачу на 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[i][allFreeBuffs[j]] == 0 then
                HasFortunateAdventurer(i,obj)
                arrayBuffTouched[i][allFreeBuffs[j]] = 1
            end
        end
    end
end

function HasFortunateAdventurer(i,obj)
    if HasHeroSkill(heroT[i],33) == not nil and random(10)+1 <= GetHeroStat(heroT[i],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[i],1,1)--morale
            GiveHeroBattleBonus(heroT[i],0,1)--luck
        elseif allFreeBuffs[bufftype] == 2 then
            if GetDate(DAY_OF_WEEK) == 7 then
                GiveHeroBattleBonus(heroT[i],1,2)--morale
            else
                GiveHeroBattleBonus(heroT[i],1,1)--morale
            end
        elseif allFreeBuffs[bufftype] == 3 then
            if GetDate(DAY_OF_WEEK) == 7 then
                GiveHeroBattleBonus(heroT[i],1,1)--morale
                GiveHeroBattleBonus(heroT[i],0,1)--luck
            elseif GetDate(DAY_OF_WEEK) == 1 or GetDate(DAY_OF_WEEK) == 3 or GetDate(DAY_OF_WEEK) == 5 then
                GiveHeroBattleBonus(heroT[i],0,1)--luck
            else
                GiveHeroBattleBonus(heroT[i],1,1)--morale
            end
        elseif allFreeBuffs[bufftype] == 5 then
            if GetDate(DAY_OF_WEEK) == 1 then
                GiveHeroBattleBonus(heroT[i],2,3)--offence
            elseif GetDate(DAY_OF_WEEK) == 2 then
                GiveHeroBattleBonus(heroT[i],1,1)--morale
            elseif GetDate(DAY_OF_WEEK) == 3 then
                GiveHeroBattleBonus(heroT[i],3,3)--defence
            elseif GetDate(DAY_OF_WEEK) == 4 then
                GiveHeroBattleBonus(heroT[i],0,1)--luck
            elseif GetDate(DAY_OF_WEEK) == 5 then
                GiveHeroBattleBonus(heroT[i],5,1)--initiative
            elseif GetDate(DAY_OF_WEEK) == 6 then
                GiveHeroBattleBonus(heroT[i],2,2)--offence
                GiveHeroBattleBonus(heroT[i],3,2)--defence
            elseif GetDate(DAY_OF_WEEK) == 7 then
                GiveHeroBattleBonus(heroT[i],6,1)--speed
            end
        elseif allFreeBuffs[bufftype] == 6 then
            GiveHeroBattleBonus(heroT[i],1,1)--morale
        elseif allFreeBuffs[bufftype] == 7 then
            if GetDate(DAY_OF_WEEK) == 7 then
                GiveHeroBattleBonus(heroT[i],0,2)--luck
            else
                GiveHeroBattleBonus(heroT[i],0,1)--luck
            end
        end
    end
end

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


Долгий вне форума
Ответить с цитированием