Можно ли реализовать триггерно увеличение максимального запаса здоровья героя на определённое значение(не фиксированное) ?
Пока придумал, но не реализовал, вариант добавлять к макс. здоровью книгами Трактат жизни +1HP N-колличество штук.

Принятый ответ

Extremator, Интересно, любой последующий каст устанавливает заново значение максимального хп, то есть оно даже меньше может стать, мне нужно чтобы бонусы стакались.
Это для установки текущего бонуса ХП.
Если ты хочешь увеличивать значение, то нужно сделать получение текущего значения.
Т.е. выглядеть будет как с лечением:
Установить бонус ХП как (текущий бонус ХП + число)
Для получения надо либо напрямую считывать данные: циклом пройтись и за каждую абилку добавить её значение к переменной, тем самым нарастив её обратно (напротив с тем что при установке её значения она наоборот расходовалась). getHP
Либо просто хранить БД с юнитами, которым было изменено ХП (т.е. внести их в систему юнит-число)
И, получив число, изменить это число в нужную сторону и выполнить установку setHP
. . . 10 минут спустя ...
Вот как-то так - setHP_16k.w3x
Добавил триггер getHP для получения числа, как и описал выше.
И чуть переделал тест скиллом (даёт рандомно от +1 до +100).
По сути, может давать и отрицательные числа, но упрётся в 0
Для этого надо добавить работу с число -32768
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
19
5 лет назад
2
Похожие вопросы:

ответ
есть вопрос про изменение хп героя
в редакторе есть действие arifmetic
остается сложить одно с другим

7
26
5 лет назад
7
2
13
5 лет назад
2
Hate, Это для меня сложно, не gui
4
26
5 лет назад
4
Можно сделать несколько вариантов способности Камня жизни, например, +1, +2, +4, +8, +16, +32, +64, +128, +256 и так далее. В разных сочетаниях они дадут любое число, которое необходимо. Но как делать алгоритм, по которому выдавать нужные способности, запамятовал)
Ранее придумывал систему с другими числами, которые не являются степенью двойки, но в мае накрылся жёсткий диск, а заново придумывать не имею цели.
2
13
5 лет назад
2
8gabriel8, а можно сделать 4 способности, каждая с 10 уровнями. Первая добавляет еденицы, другая десятки, третья сотни и 4-ая - тясячи? Рассчитать какие дать из этих способностей и какого уровня я смогу, только не могу понять как перед дачей этой абилки выставить для неё нужный уровень.
0
13
5 лет назад
0
easypeasy, вполне рабочее решение. Нельзя установить уровень способности до того как она будет получена юнитом. Поэтому сначала вручаем способность, потом устанавливаем ее уровень у данного юнита.
0
23
5 лет назад
Отредактирован pro100master
0
есть же баг вручаем абилку с 4 уровней
1 ур - 0 хп
2 ур - 1 хп
3 ур - 2 хп
4 ур - 4 хп
как мы вручаем и меняем уровень если 4 хп и удаляем а хп не теряет...
а расчет вроде
внутри код
library StateMax initializer init requires CoreState, optional AbilityPreload, optional xepreload
    globals
        private integer array powersOf2
        private integer powersOf2Count = 1
    endglobals

    struct StateMax extends TypeState
        private unitstate us = null
        private integer id = 0
        private integer count = 0
        
        public static method create takes integer id, unitstate us, integer count returns thistype
            local thistype this = thistype.allocate(0, 0)
            local integer i
            
            set this.id = id
            set this.us = us
            set this.count = count
        
            // Grow powers of 2
            if powersOf2Count < count then
                set i = powersOf2Count
                loop
                    exitwhen i == count * 2 * 2 * 3 + 1
                    
                    set powersOf2[i] = 2 * powersOf2[i - 1]

                    set i = i + 1
                endloop
                set powersOf2Count = count
            endif
            
            static if xe_PRELOAD_ABILITIES then
                call AbilityRangePreload(id, id + count * 2 - 1)
            endif
            
            return this
        endmethod
        
        method operator[]= takes unit u, real amount returns nothing
            local integer rawcode = this.id
            local integer abilityId
            local integer abilityLevel
            local integer currentAbility
            
            set amount = R2I(amount) - R2I(this[u])
            
            if amount < 0 then
                set amount = -amount
                set rawcode = rawcode + this.count
            endif
            
            set abilityId = this.count - 1
            set abilityLevel = 4
            set currentAbility = rawcode + abilityId
            loop
                exitwhen amount == 0
                
                if amount >= powersOf2[abilityId * 3 + (abilityLevel - 2)] then
                    call UnitAddAbility(u, currentAbility)
                    call SetUnitAbilityLevel(u, currentAbility, abilityLevel)
                    call UnitRemoveAbility(u, currentAbility)
                    
                    set amount = amount - powersOf2[abilityId * 3 + (abilityLevel - 2)]
                else
                    set abilityLevel = abilityLevel - 1
                    if abilityLevel <= 1 then
                        set abilityId = abilityId - 1
                        set abilityLevel = 4
                        set currentAbility = rawcode + abilityId
                    endif
                endif
            endloop
        endmethod
        
        method operator[] takes unit u returns real
            return GetUnitState(u, this.us)
        endmethod
    endstruct
    
    //! textmacro StateMaxStart takes CREATE_ABILITIES
        function StateMaxSetup takes nothing returns nothing
        /*
        //! externalblock extension=lua ObjectMerger $FILENAME$
        //! i if $CREATE_ABILITIES$ == "true" then
        //! i function CreateAbility(baseAbility, rawcodePrefix, field, abilityCount, name, icon)
        //! i     k = 0
        //! i     for sign = -1, 1, 2 do
        //! i         signStr = "+"
        //! i         if sign < 0 then
        //! i             signStr = "-"
        //! i         end
        //! i         j = 0
        //! i         for i = 0, (abilityCount - 1) * 3, 3 do
        //! i             j = j + 1
        //! i             createobject(baseAbility, rawcodePrefix .. string.sub(chars, k + 1, k + 1))
        //! i             makechange(current, "anam", "StateMax - " .. name)
        //! i             makechange(current, "ansf", "(" .. signStr .. tostring(j) .. ")")
        //! i             makechange(current, "aart", "ReplaceableTextures\\CommandButtons\\" .. icon)
        //! i             makechange(current, "aite", 0)
        //! i             makechange(current, "alev", 4)
        //! i             makechange(current, field, 1, 0)
        //! i             makechange(current, field, 2, 2^(i + 0) * sign)
        //! i             makechange(current, field, 3, 2^(i + 1) * sign)
        //! i             makechange(current, field, 4, 2^(i + 2) * sign)
        //! i             k = k + 1
        //! i         end
        //! i     end
        //! i end
        //! i setobjecttype("abilities")
        //! i chars = "abcdefghijklmnopqrstuvwxyz"
        */
    //! endtextmacro
    
    //! textmacro StateMaxCreate takes NAME, COUNT, PREFIX, SOURCE_ABILITY, FIELD, ICON
        //! i CreateAbility("$ABILITY$", "$PREFIX$", "$FIELD$", $COUNT$, "$NAME$", "$ICON$")
        globals
            TypeState STATE_$NAME$
        endglobals
        set STATE_$NAME$ = StateMax.create('$PREFIX$a', UNIT_STATE_$NAME$, $COUNT$)
    //! endtextmacro
    
    //! textmacro StateMaxEnd
        /*
        //! i end
        //! endexternalblock
        */
        endfunction
    //! endtextmacro
    
    //! runtextmacro StateMaxStart("false")
    //! runtextmacro StateMaxCreate("MAX_LIFE", "3", "ZxL", "AIlf", "Ilif", "BTNHealthStone.blp")
    //! runtextmacro StateMaxCreate("MAX_MANA", "3", "ZxM", "AImz", "Iman", "BTNManaStone.blp")
    //! runtextmacro StateMaxEnd()
        
    private function init takes nothing returns nothing
        set powersOf2[0] = 1
        
        call StateMaxSetup()
    endfunction
endlibrary
4
19
5 лет назад
4
easypeasy:
Hate, Это для меня сложно, не gui
Просто используй личный сценарий SetUnitMaxState(unit, UNIT_STATE_MAX_LIFE, R2I(GetUnitState(unit, UNIT_STATE_MAX_LIFE) + (50)))
Например увеличение здоровья на 50 ед.
Вместо unit нужно название переменной вставить, где хранится твой юнит. Только не забудь, что глобалки объявленные через оболочку редактора имеют приставку udg_
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.