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
Триггеры лучше просто так не удалять, а с задержой как у фрога, я эту систему выкладывал.
Потом ClearAction и ClearConditions не удаляют сами хендлы условий и дейсвий, если с условием пофиг, т.к оно зависает в болекспре и не утекает, то TriggerAddAction( trg, function name) будет возвращать каждый раз новый хендл, что есть утечка, нужно сохранять экшены триггеров в переменную а затем удалять действием TriggerRemoveAction, иначе будут плодится утечки или как фрог все действия делать в кондишенах, там из отличий только лимит операций поменьше и вейты не работают с синками.
Мда. Идиотизм прогрессирует...
Возвращает обьект типа location, разумеется если не удалить этот самый location будет утечка, но не функция утечна а кривой код который неудаляет локейшин ( а еще и бессмысленный, т.к есть нативки для координат).
Разумеется нет, приказы строго синхронизируются.
Да и как вы себе это представляете? У игрока А работник пошёл рубить лес, а у игрока Б этот же самый работник пошел добывать золото? Что за бред?
да я просто думал эмулировать отдачу приказов от игрока, ну типо игрок сам приказал юниту двигаться и т.д
Issue (Immiditate\point\target) order отдает приказ юниту, если вам открывать спеллбуки и прочее - ForceUIKey ( ) + абилка с хоткеем, без указания цели разумеется.
Прочие псевдоприказы вроде включения автокастов, без сбивания приказа реализуемо только мемхаком.
Разумеется нет, приказы строго синхронизируются.
Да и как вы себе это представляете? У игрока А работник пошёл рубить лес, а у игрока Б этот же самый работник пошел добывать золото? Что за бред?
Тупо выставляет владельцу тип цели - герой, владельцы защиты от магии считаются героями, т.е заклинания будут считать их героями и действовать как на героев.
ну альфу неправильно значит настраиваешь, там кстати не помню у молнии вроде были настройки видимости и еще чего то, смотри все нативки.
Кстати на сайте есть система которая сама двигает молнии за обьектами и делает затухание, на одном таймере.
Steal nerves, ты одно упустил, с пассивками boolean attack, boolean ranged не связаны, просто это галочки для проверок, если поставить, true, false, то при нанесении урона по врагу с ледяным щитом на источнике урона появится дебафф, то же самое с аурой шипов у Фуриона, однако это никак не затрагивает каменные доспехи великана и прочее, т.к эти пассивки ждут не урона а атаки, движок уже на замахе знает будет промах или нет.
Вампиризмы тоже никак не работают на урон нанесенный этой функцией не смотря на параметры, но эти параметры очень полезны при тригерном детекте урона на мемхаке, т.к можно проверить эти флаги урона.
Нам вот очень интересно слушать такие подробности вашего эмоционального потрясения, в следующий раз пишите что "я ошибся" или "проклятый T9, заменил слово".
Действия триггера могут быть удалены как обьект, так и очищены из триггера (но в памяти висеть они останутся), TriggerRemoveAction - удалит указанное действие, требует ссылку на действие (handle triggeraction), так же TriggerClearActions уберет у триггера все действия, но они будут существовать как хендлы, и потребуется их последущее удаление действием TriggerRemoveAction чтобы не плодить утечки.
Еще вопросы?
Где UnitShareVision - если что даммик нихрена не видит после того как создан, он либо должен иметь точно такие же координаты как и цель либо у него должна быть расшарена видимость над целью.
События никак не удаляются, они связаны с обьектами на которые они рассчитаны, у триггера можно удалять только условия и действия, напишите что хотите сделать?
Руками, прямыми человеческими руками.
Есть такие карты как ExtrimeCandyWars и BlizzardTD они открыты и написаны на гуях, смотрите и повторяйте, читайте комментарии авторов карт.
Пушистый, Вот немного инфы: ссылка
По сути аргументы - это обычные локалки, просто когда jass интерпритируется в asm код, там объявляются локалки-аргументы и вних сразу же пишется значение, а затем они зачищаются перед выходом, таков интерпритатор, можно было бы изи допилить и аргументы в каллбеки.
» WarCraft 3 / Скиньте ссылки на рабочие анти мх на мемхаке
» WarCraft 3 / Время
Ред. quq_CCCP
» WarCraft 3 / Вопрос по коду из доты
» WarCraft 3 / Ursa Warrior из DotA со всеми способностями
Потом ClearAction и ClearConditions не удаляют сами хендлы условий и дейсвий, если с условием пофиг, т.к оно зависает в болекспре и не утекает, то TriggerAddAction( trg, function name) будет возвращать каждый раз новый хендл, что есть утечка, нужно сохранять экшены триггеров в переменную а затем удалять действием TriggerRemoveAction, иначе будут плодится утечки или как фрог все действия делать в кондишенах, там из отличий только лимит операций поменьше и вейты не работают с синками.
» WarCraft 3 / Является ли GetSpellTargetLoc() утечкой если не удалять её?
Возвращает обьект типа location, разумеется если не удалить этот самый location будет утечка, но не функция утечна а кривой код который неудаляет локейшин ( а еще и бессмысленный, т.к есть нативки для координат).
» WarCraft 3 / Как открыть карту TrollvsElves в Редакторе карт?
» WarCraft 3 / Способности у закопавшихся существ
» WarCraft 3 / Как обнулить записанный хендл в хэштаблице?
» WarCraft 3 / Хештаблица
» WarCraft 3 / Хештаблица
» WarCraft 3 / Можно ли локально отдать приказ юниту?
Прочие псевдоприказы вроде включения автокастов, без сбивания приказа реализуемо только мемхаком.
» WarCraft 3 / Можно ли локально отдать приказ юниту?
Да и как вы себе это представляете? У игрока А работник пошёл рубить лес, а у игрока Б этот же самый работник пошел добывать золото? Что за бред?
» WarCraft 3 / Как работает "Защита от магии"?
» WarCraft 3 / Молнии
Кстати на сайте есть система которая сама двигает молнии за обьектами и делает затухание, на одном таймере.
» WarCraft 3 / УУУУ Функции
» WarCraft 3 / УУУУ Функции
» WarCraft 3 / Поясните функцию
Вампиризмы тоже никак не работают на урон нанесенный этой функцией не смотря на параметры, но эти параметры очень полезны при тригерном детекте урона на мемхаке, т.к можно проверить эти флаги урона.
» WarCraft 3 / Удаление событий из триггера.
Действия триггера могут быть удалены как обьект, так и очищены из триггера (но в памяти висеть они останутся), TriggerRemoveAction - удалит указанное действие, требует ссылку на действие (handle triggeraction), так же TriggerClearActions уберет у триггера все действия, но они будут существовать как хендлы, и потребуется их последущее удаление действием TriggerRemoveAction чтобы не плодить утечки.
Еще вопросы?
» WarCraft 3 / Создание триггерных иллюзий
» WarCraft 3 / Удаление событий из триггера.
» WarCraft 3 / Обнуление аргументов типа handle
» WarCraft 3 / Сюрв
Есть такие карты как ExtrimeCandyWars и BlizzardTD они открыты и написаны на гуях, смотрите и повторяйте, читайте комментарии авторов карт.
» WarCraft 3 / Обнуление аргументов типа handle
По сути аргументы - это обычные локалки, просто когда jass интерпритируется в asm код, там объявляются локалки-аргументы и вних сразу же пишется значение, а затем они зачищаются перед выходом, таков интерпритатор, можно было бы изи допилить и аргументы в каллбеки.
» WarCraft 3 / Выделение памяти при работе с хэш-таблицей
Карту кинь, потом гляну... Мб еще лич заинтересуется.
» WarCraft 3 / Выделение памяти при работе с хэш-таблицей
Тип string в JASS это хендл из таблицы строк, туда попадает все, по осторожнее со строками.