32

» WarCraft 3 / Время

Разумеется без мемхака никак, а так смотри тему с мх, вроде мусолилось.
32

» WarCraft 3 / Вопрос по коду из доты

Принятый ответ
А это ресайкл групп, кусок системы GroupUtils.
код
library GroupUtils
//******************************************************************************
//* BY: Rising_Dusk
//* 
//* This library is a simple implementation of a stack for groups that need to
//* be in the user's control for greater than an instant of time. Additionally,
//* this library provides a single, global group variable for use with user-end
//* enumerations. It is important to note that users should not be calling
//* DestroyGroup() on the global group, since then it may not exist for when it
//* it is next needed.
//*
//* The group stack removes the need for destroying groups and replaces it with
//* a recycling method.
//*     function NewGroup takes nothing returns group
//*     function ReleaseGroup takes group g returns boolean
//*     function GroupRefresh takes group g returns nothing
//* 
//* NewGroup grabs a currently unused group from the stack or creates one if the
//* stack is empty. You can use this group however you'd like, but always
//* remember to call ReleaseGroup on it when you are done with it. If you don't
//* release it, it will 'leak' and your stack may eventually overflow if you
//* keep doing that.
//* 
//* GroupRefresh cleans a group of any shadow references which may be clogging
//* its hash table. If you remove a unit from the game who is a member of a unit
//* group, it will 'effectively' remove the unit from the group, but leave a
//* shadow in its place. Calling GroupRefresh on a group will clean up any
//* shadow references that may exist within it.
//* 
globals
    //* Group for use with all instant enumerations
    group ENUM_GROUP = CreateGroup()
    
    //* Temporary references for GroupRefresh
    private boolean Flag                                              = false
    private group Refr                                                = null
    
    //* Assorted constants
    private constant integer MAX_HANDLE_COUNT                         = 408000
    private constant integer MIN_HANDLE_ID                            = 0x100000
    
    //* Arrays and counter for the group stack
    private group array Groups
    private integer array Status[MAX_HANDLE_COUNT]
    private integer Count                                             = 0
endglobals

private function AddEx takes nothing returns nothing
    if Flag then
        call GroupClear(Refr)
        set Flag = false
    endif
    call GroupAddUnit(Refr, GetEnumUnit())
endfunction
    
function GroupRefresh takes group g returns nothing
    set Flag = true
    set Refr = g
    call ForGroup(Refr, function AddEx)
    if Flag then
        call GroupClear(g)
    endif
endfunction

function NewGroup takes nothing returns group
    if Count == 0 then
        set Groups[0] = CreateGroup()
    else
        set Count = Count - 1
    endif
    set Status[GetHandleId(Groups[Count])-MIN_HANDLE_ID] = 1
    return Groups[Count]
endfunction

function ReleaseGroup takes group g returns boolean
    local integer stat = Status[GetHandleId(g)-MIN_HANDLE_ID]
    local boolean b    = true
    if g == null then
        debug call BJDebugMsg(SCOPE_PREFIX+" Error: Null groups cannot be released")
        set b = false
    elseif stat == 0 then
        debug call BJDebugMsg(SCOPE_PREFIX+" Error: Group not part of stack")
        set b = false
    elseif stat == 2 then
        debug call BJDebugMsg(SCOPE_PREFIX+" Error: Groups cannot be multiply released")
        set b = false
    elseif Count == 8191 then
        debug call BJDebugMsg(SCOPE_PREFIX+" Error: Max groups achieved, destroying group")
        call DestroyGroup(g)
        set b = false
    else
        call GroupClear(g)
        set Groups[Count]                = g
        set Count                        = Count + 1
        set Status[GetHandleId(g)-MIN_HANDLE_ID] = 2
    endif
    return b
endfunction
endlibrary
А вот её код, ничего особо заумного...
32

» WarCraft 3 / Ursa Warrior из DotA со всеми способностями

Триггеры лучше просто так не удалять, а с задержой как у фрога, я эту систему выкладывал.
Потом ClearAction и ClearConditions не удаляют сами хендлы условий и дейсвий, если с условием пофиг, т.к оно зависает в болекспре и не утекает, то TriggerAddAction( trg, function name) будет возвращать каждый раз новый хендл, что есть утечка, нужно сохранять экшены триггеров в переменную а затем удалять действием TriggerRemoveAction, иначе будут плодится утечки или как фрог все действия делать в кондишенах, там из отличий только лимит операций поменьше и вейты не работают с синками.
32

» WarCraft 3 / Является ли GetSpellTargetLoc() утечкой если не удалять её?

Мда. Идиотизм прогрессирует...
Возвращает обьект типа location, разумеется если не удалить этот самый location будет утечка, но не функция утечна а кривой код который неудаляет локейшин ( а еще и бессмысленный, т.к есть нативки для координат).
32

» WarCraft 3 / Как открыть карту TrollvsElves в Редакторе карт?

Vanbl4, случай а тебе зачем? Если ты не знаешь как открыть, то и делать тебе там нечего.
32

» WarCraft 3 / Способности у закопавшихся существ

Обычный морф в другого юнита, просто добавь альтернативе инвиз и бонус реген.
32

» WarCraft 3 / Хештаблица

DemonoiD, а зачем? Зачем массив хештаблиц когда достаточно одной? В одну хт можно загрузить все что угодно, сколько угодно юнитов.
32

» WarCraft 3 / Хештаблица

Нет, там вроде бы есть несколько заготовок под хештаблицу в памяти, если лимит превышен выдает уже существующую по кругу.
32

» WarCraft 3 / Можно ли локально отдать приказ юниту?

UrsaBoss:
quq_CCCP:
Разумеется нет, приказы строго синхронизируются.
Да и как вы себе это представляете? У игрока А работник пошёл рубить лес, а у игрока Б этот же самый работник пошел добывать золото? Что за бред?
да я просто думал эмулировать отдачу приказов от игрока, ну типо игрок сам приказал юниту двигаться и т.д
Issue (Immiditate\point\target) order отдает приказ юниту, если вам открывать спеллбуки и прочее - ForceUIKey ( ) + абилка с хоткеем, без указания цели разумеется.
Прочие псевдоприказы вроде включения автокастов, без сбивания приказа реализуемо только мемхаком.
32

» WarCraft 3 / Можно ли локально отдать приказ юниту?

Принятый ответ
Разумеется нет, приказы строго синхронизируются.
Да и как вы себе это представляете? У игрока А работник пошёл рубить лес, а у игрока Б этот же самый работник пошел добывать золото? Что за бред?
32

» WarCraft 3 / Как работает "Защита от магии"?

Тупо выставляет владельцу тип цели - герой, владельцы защиты от магии считаются героями, т.е заклинания будут считать их героями и действовать как на героев.
32

» WarCraft 3 / Молнии

ну альфу неправильно значит настраиваешь, там кстати не помню у молнии вроде были настройки видимости и еще чего то, смотри все нативки.
Кстати на сайте есть система которая сама двигает молнии за обьектами и делает затухание, на одном таймере.
32

» WarCraft 3 / УУУУ Функции

PyCCKuu_4eJl, как как, пассивка рунных браслетов, с фактором снижения урона 2, весь маг урон становится отрецательным, ну а дальше все просто.
32

» WarCraft 3 / УУУУ Функции

Еще детект физического урона делается через маг резист в 200% либо мемхаком.
32

» WarCraft 3 / Поясните функцию

Steal nerves, ты одно упустил, с пассивками boolean attack, boolean ranged не связаны, просто это галочки для проверок, если поставить, true, false, то при нанесении урона по врагу с ледяным щитом на источнике урона появится дебафф, то же самое с аурой шипов у Фуриона, однако это никак не затрагивает каменные доспехи великана и прочее, т.к эти пассивки ждут не урона а атаки, движок уже на замахе знает будет промах или нет.
Вампиризмы тоже никак не работают на урон нанесенный этой функцией не смотря на параметры, но эти параметры очень полезны при тригерном детекте урона на мемхаке, т.к можно проверить эти флаги урона.
32

» WarCraft 3 / Удаление событий из триггера.

Lp666:
PT153, Слегка описался, вопрос был про действия.
Нам вот очень интересно слушать такие подробности вашего эмоционального потрясения, в следующий раз пишите что "я ошибся" или "проклятый T9, заменил слово".
Действия триггера могут быть удалены как обьект, так и очищены из триггера (но в памяти висеть они останутся), TriggerRemoveAction - удалит указанное действие, требует ссылку на действие (handle triggeraction), так же TriggerClearActions уберет у триггера все действия, но они будут существовать как хендлы, и потребуется их последущее удаление действием TriggerRemoveAction чтобы не плодить утечки.
Еще вопросы?
32

» WarCraft 3 / Создание триггерных иллюзий

Где UnitShareVision - если что даммик нихрена не видит после того как создан, он либо должен иметь точно такие же координаты как и цель либо у него должна быть расшарена видимость над целью.
32

» WarCraft 3 / Удаление событий из триггера.

События никак не удаляются, они связаны с обьектами на которые они рассчитаны, у триггера можно удалять только условия и действия, напишите что хотите сделать?
32

» WarCraft 3 / Сюрв

Руками, прямыми человеческими руками.
Есть такие карты как ExtrimeCandyWars и BlizzardTD они открыты и написаны на гуях, смотрите и повторяйте, читайте комментарии авторов карт.
32

» WarCraft 3 / Обнуление аргументов типа handle

Принятый ответ
Пушистый, Вот немного инфы: ссылка
По сути аргументы - это обычные локалки, просто когда jass интерпритируется в asm код, там объявляются локалки-аргументы и вних сразу же пишется значение, а затем они зачищаются перед выходом, таков интерпритатор, можно было бы изи допилить и аргументы в каллбеки.
32

» WarCraft 3 / Выделение памяти при работе с хэш-таблицей

Мб из иконок сделать типы раз строками засирается память при юзе твой системы с мультмбордами?
Карту кинь, потом гляну... Мб еще лич заинтересуется.
32

» WarCraft 3 / Выделение памяти при работе с хэш-таблицей

Ты случаем не плодишь строки?
Тип string в JASS это хендл из таблицы строк, туда попадает все, по осторожнее со строками.