Я бы сделал через создание дамми юнит но лишно как то но ли есть адрес на визуальные изминение текушего и максимального еды..
Спасибо. А пока ишу в списке функции мемхак каждой строчкой

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

DracoL1ch, Не понял как я поменяю количество еды приносяший?
DracoL1ch, или абилка такой есть?
DracoL1ch, или ты имел виду создать типо так но на основе юнита (Сам писал)
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
Сделал если кому нужно контроль максимальной еды
// RUS: Создаем 8 юнит еду (Каждый шаг увиличивает 2ух-кратный)
//! runtextmacro UnitStart()
//! i CreateUnit("hfoo", "zxF", "ufma", "8", "FOOD", "BTNMonsterLure.blp")
//! runtextmacro UnitEnd()

//! textmacro UnitStart
    /* RUS: Тут можно убрать если не стоит (MemoryHack)
    //! externalblock extension=lua ObjectMerger $FILENAME$
    //! i function CreateUnit(base, prefix, field, count, name, icon)
    //! i     k = 0
    //! i     j = 0
    //! i     for i = 0, (count - 1) do
    //! i         j = j + 1
    //! i         createobject(base, prefix .. string.sub(chars, k + 1, k + 1))
    //! i         makechange(current, "unam", "Unit - " .. name)
    //! i         makechange(current, "utip", "")
    //! i         makechange(current, "utub", "")
    //! i         makechange(current, "unsf", "(+" .. tostring(2^i) .. ")")
    //! i         makechange(current, "uico", "ReplaceableTextures\\CommandButtons\\" .. icon)
    //! i         makechange(current, field, 2^i)
    //! i         k = k + 1
    //! i     end
    //! i end
    //! i setobjecttype("units")
    //! i chars = "abcdefghijklmnopqrstuvwxyz"
    */
//! endtextmacro

//! textmacro UnitEnd
    /* RUS: Тут можно убрать если не стоит (MemoryHack)
    //! endexternalblock
    */
//! endtextmacro

globals
    constant integer xe_MAX_PLAYERS        = 7
    
    // RUS: Контроль еды
    constant integer xe_COUNT_FOOD         = 8
    constant integer xe_RAWCODE_FOOD       = 'zxFa'
endglobals

struct Food
    private static group   array groups[xe_MAX_PLAYERS]
    private static integer array powers[xe_COUNT_FOOD]
    
    private static method onInit takes nothing returns nothing
        local integer i = 1
        
        set thistype.powers[0] = 1
        
        loop
            exitwhen i > xe_COUNT_FOOD
            set thistype.powers[i] = thistype.powers[i - 1] * 2
            set i = i + 1
        endloop
        
        set i = 0
        loop
            exitwhen i == xe_MAX_PLAYERS
            set thistype.groups[i] = CreateGroup()
            set i = i + 1
        endloop
    endmethod
    
    public static method operator []= takes player p, integer i returns nothing
        local integer count = xe_COUNT_FOOD - 1
        local group g = thistype.groups[GetPlayerId(p)]
        local unit u = FirstOfGroup(g)
        
        loop
            exitwhen u == null
            call RemoveUnit(u)
            call GroupRemoveUnit(g, u)
            set u = FirstOfGroup(g)
        endloop
        
        loop
            exitwhen i == 0
            if i >= thistype.powers[count] then
                call GroupAddUnit(g, CreateUnit(p, xe_RAWCODE_FOOD + count, 0., 0., 0.))
                set i = i - thistype.powers[count]
            else
                set count = count - 1
            endif
        endloop
        
        set u = null
        set g = null
    endmethod
endstruct
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
23
6 лет назад
0
ScopteRectuS, а ты пробуй омг его можно получить только Get а текуший можно менять в стандартной
0
21
6 лет назад
0
Ну вспомните доту, там секунды показываются пищей. Всё прекрасно работает.
0
23
6 лет назад
0
ScopteRectuS, ты в натуре не вникаеш кода в доте реализован на текушего еду который можно менять. Но не максимальную его можно лишь получить Get а увеличить еду нужно создавать юнит с единиц едой (Не понял проходи мимо) Ответ дан уже.
0
21
6 лет назад
0
ладно, прошёл мимо.
2
16
6 лет назад
2
зачем менять через единицу, если можно сделать бинарную систему 1 2 4 8 16 32 етк?
0
23
6 лет назад
0
DracoL1ch, Не понял как я поменяю количество еды приносяший?
DracoL1ch, или абилка такой есть?
DracoL1ch, или ты имел виду создать типо так но на основе юнита (Сам писал)
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
Сделал если кому нужно контроль максимальной еды
// RUS: Создаем 8 юнит еду (Каждый шаг увиличивает 2ух-кратный)
//! runtextmacro UnitStart()
//! i CreateUnit("hfoo", "zxF", "ufma", "8", "FOOD", "BTNMonsterLure.blp")
//! runtextmacro UnitEnd()

//! textmacro UnitStart
    /* RUS: Тут можно убрать если не стоит (MemoryHack)
    //! externalblock extension=lua ObjectMerger $FILENAME$
    //! i function CreateUnit(base, prefix, field, count, name, icon)
    //! i     k = 0
    //! i     j = 0
    //! i     for i = 0, (count - 1) do
    //! i         j = j + 1
    //! i         createobject(base, prefix .. string.sub(chars, k + 1, k + 1))
    //! i         makechange(current, "unam", "Unit - " .. name)
    //! i         makechange(current, "utip", "")
    //! i         makechange(current, "utub", "")
    //! i         makechange(current, "unsf", "(+" .. tostring(2^i) .. ")")
    //! i         makechange(current, "uico", "ReplaceableTextures\\CommandButtons\\" .. icon)
    //! i         makechange(current, field, 2^i)
    //! i         k = k + 1
    //! i     end
    //! i end
    //! i setobjecttype("units")
    //! i chars = "abcdefghijklmnopqrstuvwxyz"
    */
//! endtextmacro

//! textmacro UnitEnd
    /* RUS: Тут можно убрать если не стоит (MemoryHack)
    //! endexternalblock
    */
//! endtextmacro

globals
    constant integer xe_MAX_PLAYERS        = 7
    
    // RUS: Контроль еды
    constant integer xe_COUNT_FOOD         = 8
    constant integer xe_RAWCODE_FOOD       = 'zxFa'
endglobals

struct Food
    private static group   array groups[xe_MAX_PLAYERS]
    private static integer array powers[xe_COUNT_FOOD]
    
    private static method onInit takes nothing returns nothing
        local integer i = 1
        
        set thistype.powers[0] = 1
        
        loop
            exitwhen i > xe_COUNT_FOOD
            set thistype.powers[i] = thistype.powers[i - 1] * 2
            set i = i + 1
        endloop
        
        set i = 0
        loop
            exitwhen i == xe_MAX_PLAYERS
            set thistype.groups[i] = CreateGroup()
            set i = i + 1
        endloop
    endmethod
    
    public static method operator []= takes player p, integer i returns nothing
        local integer count = xe_COUNT_FOOD - 1
        local group g = thistype.groups[GetPlayerId(p)]
        local unit u = FirstOfGroup(g)
        
        loop
            exitwhen u == null
            call RemoveUnit(u)
            call GroupRemoveUnit(g, u)
            set u = FirstOfGroup(g)
        endloop
        
        loop
            exitwhen i == 0
            if i >= thistype.powers[count] then
                call GroupAddUnit(g, CreateUnit(p, xe_RAWCODE_FOOD + count, 0., 0., 0.))
                set i = i - thistype.powers[count]
            else
                set count = count - 1
            endif
        endloop
        
        set u = null
        set g = null
    endmethod
endstruct
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.