22

» WarCraft 3 / Скрипт для вара?

ClotPh, Для коментарии достаточно написать блок кода
/*
* name -  Название героя
* Создаем переменную имя для героя
*/
local string name = null
Вот так делай так ускорит понимание кашу кода другим людям
22

» RenderEdge / [RenderEdge] Memory Hack

Venommm, можно укажи отрицательный от текушего размера блока в обратный и он уйдет
22

» WarCraft 3 / Переменная

в группу запихни выбраных юнитов (Хоть статью читай полено чем тупых вопросов задавать) За день 12 вопрос от тебя боже
22

» WarCraft 3 / Отряд

quq_CCCP, верно я бы его перенес в инициализация и спокойно проверять
22

» WarCraft 3 / Рав коды

это число достаточно получить например для юнита GetUnitTypeID(...) и так далее
22

» WarCraft 3 / [Мемхак] Как указать виз. количество текущий и максимальный еды

Принятый ответ
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
22

» WarCraft 3 / Пассивка

юнит получает урон
условие random(0, 10000) <= 400
дейсвия что хочеш блокируй урон и прочего но лучше готовый библиотека скачай
а 400 равен 4% шанса
Это я привел пример так что не копируй =)
22

» WarCraft 3 / [Алгоритм] Поправь где ошибка в алгоритме!

Принятый ответ
Причину нашел что раньше было "xe_RAWCODE_FOOD *-* count" поэтому давали не правильно, но путем поиска нашел причину и исправил на *+*
22

» WarCraft 3 / КАК защитить карту от Ladik's MPQ Editor ?

зачем защищать карту не пойму людей который бойтся показать красоту кода или обьектов... Хотите свои права делай на Unity или других там как раз имеет лизенция право зашит. А варик открытая и доступная даже гласит правило когда вы 1 раз открыли редактор
22

» WarCraft 3 / [Мемхак] Как указать виз. количество текущий и максимальный еды

ScopteRectuS, ты в натуре не вникаеш кода в доте реализован на текушего еду который можно менять. Но не максимальную его можно лишь получить Get а увеличить еду нужно создавать юнит с единиц едой (Не понял проходи мимо) Ответ дан уже.
22

» WarCraft 3 / Как возродить созданного юнита?

чтобы ресал мертвых юнитов надо получить значение тип юнита умираюшего и заносить в массив пока таймер или вейт не выполнит свою задачу и вытаскивай из массива и создай юнит по типу
22

» WarCraft 3 / Выжить в Катакомбах

Бордер, добавил бы бесмертный монстр который нельзя агрить например червяк как в фильме "дрожь" его можно лишь заманить в ловушку. Иначе сожрет и пол должен твердый чтобы его не могли жрать и многое бы помог но я мя свой проект по крупному =)
22

» WarCraft 3 / Сумма характеристик всех героев

Принятый ответ
вот и получаем общий статы вссех героев
count_hero_created - Количество героев созданых на карте оно будет расти как будет создавать
heroes - массив героев
и можете спокойно получать из данных all_stats в любом месте куда хочеш
Загруженные файлы
22

» WarCraft 3 / Сумма характеристик всех героев

а у тя просто получает текуший героя при цикл и вносиш но не увеличивает поэтому ты увидиш общий как 1 героя
22

» WarCraft 3 / Сумма характеристик всех героев

счетчик растет при создание героя? из него получаем циклом который в массиве сохранили и прибавляем от текушего и получаем прирост потом снова обнуляем и снова циклом расчитать
22

» WarCraft 3 / [Мемхак] Как указать виз. количество текущий и максимальный еды

Fakov, еду максимальную то есть я могу его триггером циклом создать юнит с 1 едой прирост и удалять.. а хотел без создание юнита так как еду я не использую в игре а тупо визуально менять
Хотя не важно. Пусть будет создавая 100 юнит на 1 игрока при этом еше и 6 игрока то лаги но пофиг как то.
function SetFood takes player p, integer i returns nothing
    local boolean isDeleteFood = false
    local group g
    local unit u
    
    if i < 0 then
        call BJDebugMsg("|cffFF0000Error|r|cffFFFF00:|r |cff8080FF Food |r|cffFFFF00:|r ")
        return
    endif
    
    set i = i - GetPlayerState(p, PLAYER_STATE_RESOURCE_FOOD_CAP)
    
    if i < 0 then
        set i = -(i)
        set isDeleteFood = true
        set g = GetUnitsOfPlayerAndTypeId(p, rawcode_food)
    endif
        
    loop
        exitwhen i == 0
        if isDeleteFood then
            set u = FirstOfGroup(g)
            call RemoveUnit(u)
            call GroupRemoveUnit(g, u)
        else
            set food_unit = CreateUnit(p, rawcode_food, GetStartLocationX(0), GetStartLocationY(0), 0.)
            call ShowUnit(food_unit, false)
            call UnitAddAbility(food_unit, 'Aloc')
        endif
        set i = i - 1
    endloop
    
    if isDeleteFood then
        call GroupClear(g)
        call DestroyGroup(g)
        set g = null
        set u = null
    endif
endfunction
22

» WarCraft 3 / Jass

на гуи просто вноси GetDataUnit(умерший) и сохрани хендл и таймер после чего берем хендл и тип и ресай даже без jass можно
22

» WarCraft 3 / Плавающий текст

Принятый ответ
у тестаг есть функция жизни вот его и указывай и оно автоматом удаляет тестагом
22

» WarCraft 3 / Воскрешение всех героев

создай массив с 12 значении в него запихай герои при пиков.... Если волна пройдено чекаем каждый игрока мертв ли герой то воскрешаем после этого условия можно уже обший передвинуть в позицию