Триггерный реген у всех на карте - на хэндл каждого/через структуры вешаешь индивидуальный реген, а командой в чате просто меняешь значение переменной, которая отвечает за реген (то есть ставишь 0 и все)
Можно и не триггерный, а использовать ABILITY_RLF_LIFE_REGEN_RATE или UNIT_IF_HIT_POINTS_REGENERATION_TYPE.
1.Создать локальную переменую\ установить её равной текущей силе юнита применяющего способность.
После определённых манипуляций повторить.
Отнять результат первой локалки от второй.
На полученую сумму уменьшить применяющему герою силу.
Почему на гуи нельзя локалки делать....
Никто вам не мешает костылить на гуи. Но думаю вы вообще не понимаете принцип работы локальных переменных. В последнем патче вместо кривого jass ввели lua, на котором всё делается в разы быстрее и проще чем на гуях.
В файлах common.j и blizzard.j. Или установить силу на гуи и конвертировать триггер в текст. Если используете JNGP, то Ctrl+click по функции открывает справку. Нужные вам функции выглядят так:
---@param whichHero unit
---@param newStr integer
---@param permanent boolean
---@return nothing
function SetHeroStr(whichHero, newStr, permanent) end -- (native)
---@param whichHero unit
---@param newAgi integer
---@param permanent boolean
---@return nothing
function SetHeroAgi(whichHero, newAgi, permanent) end -- (native)
---@param whichHero unit
---@param newInt integer
---@param permanent boolean
---@return nothing
function SetHeroInt(whichHero, newInt, permanent) end -- (native)
И вообще, для таких базовых вещей существуют статьи.
Конечно я могу ошибаться, но в этом случае счетчик ссылок объекта u никогда не достигнет нуля.
Объект u всего лишь указатель на созданного юнита, который повиснет в памяти, если не сделать set a = null. Какой ещё счётчик ссылок у него может быть?
local handle a = GetHandleId() -- создаём хэндл
call SaveHashtableHandle( Hashtable, id , 0, val ) -- в хэштаблице по ключам id,0 появилось значение этого хэндла
call FlushChildHashtable( Hashtable, id ) -- все записи по ключу id исчезли из таблицы
set a = null -- хэндл никуда не делся и его нужно обнулить
Луа это хорошо, сам на нем пишу, но гуишникам от него пользы мало.
Звучит так, как будто "гуишник" это диагноз. Не спорю, есть особо одарённые личности, но думаю адекватные смогут подправить несколько строк в тексте под свои нужды.
сделать тоже самое но только в проверке указать тип следующего юнита, и так столько раз сколько у тебя типов юнитов
В самом же вопросе указано:
например 20 разных областей и 20 одинаковых юнитов
Так как я не разбираюсь в гуях, то напишу пример на lua без идиотских проверок на тип юнита
do
local table = {} -- используем таблицу для сзапоминания юнитов
-- создаём функцию для удобного спавна
---@param player player
---@param raw integer
---@param rct rect
function SpawnGuard(player, raw, rct)
-- получаем координаты рэкта
local minX, maxX, minY, maxY = GetRectMinX(rct), GetRectMaxX(rct), GetRectMinY(rct), GetRectMaxY(rct)
-- создаём юнита
local unit = CreateUnit(player, raw, math.random(minX, maxX), math.random(minY, maxY), math.random(0, 359))
-- сохраняем хэндл в таблицу
table[GetHandleId(unit)] = rct
end
-- отлавливаем смерть юнитов
local trigger = CreateTrigger() -- создаём триггер
for i = 0, bj_MAX_PLAYER_SLOTS-1 do
-- перебираем все слоты игрока
TriggerRegisterPlayerUnitEvent(trigger, Player(i), EVENT_PLAYER_UNIT_DEATH) -- регистрируем событие смерти
end
TriggerAddAction(trigger, function()
-- добавляем действия в триггер
local unit = GetTriggerUnit() -- получаем юнита
local handle = GetHandleId(unit) -- получаем хэндл юнита
if table[handle] == nil then return end -- проверяем его наличие в таблице
local raw = GetUnitTypeId(unit) -- запоминаем тип юнита на случай внезапного исчезновения хэндла
local player = GetOwningPlayer(unit) -- запоминаем владельца по той же причине
-- стартуем таймер
TimerStart(CreateTimer(), 20, false, function()
SpawnGuard(player, raw, table[handle]) -- спавним юнита по новой
table[handle] = nil -- подчищаем за собой
DestroyTimer(GetExpiredTimer()) -- не забываем удалять отработанные таймеры
end)
end)
end
-- Где-то ниже по коду
do
local InitGlobalsOrigin = InitGlobals
function InitGlobals()
InitGlobalsOrigin()
SpawnGuard(Player(PLAYER_NEUTRAL_AGGRESSIVE), FourCC('hfoo'), gg_rct_myGuardRect)
SpawnGuard(Player(PLAYER_NEUTRAL_AGGRESSIVE), FourCC('hfoo'), gg_rct_myGuardRect1)
SpawnGuard(Player(PLAYER_NEUTRAL_AGGRESSIVE), FourCC('hfoo'), gg_rct_myGuardRect2)
SpawnGuard(Player(PLAYER_NEUTRAL_AGGRESSIVE), FourCC('hfoo'), gg_rct_myGuardRect3)
SpawnGuard(Player(PLAYER_NEUTRAL_AGGRESSIVE), FourCC('hfoo'), gg_rct_myGuardRect4)
SpawnGuard(Player(PLAYER_NEUTRAL_AGGRESSIVE), FourCC('hfoo'), gg_rct_myGuardRect5)
SpawnGuard(Player(PLAYER_NEUTRAL_AGGRESSIVE), FourCC('hfoo'), gg_rct_myGuardRect6)
end
end
» WarCraft 3 / Вопрос физической сложности проверки карты
» WarCraft 3 / Реген
» WarCraft 3 / Дать и забрать способность без локалок
» WarCraft 3 / Реген
Ред. nazarpunk
» WarCraft 3 / Дать и забрать способность без локалок
» WarCraft 3 / Установка локальной переменой для силы
Ред. nazarpunk
» WarCraft 3 / Установка локальной переменой для силы
» WarCraft 3 / Дать и забрать способность без локалок
» WarCraft 3 / Нужно ли обнулять handle в хеш-таблице?
Ред. nazarpunk
» WarCraft 3 / Нужно ли обнулять handle в хеш-таблице?
Ред. nazarpunk
» WarCraft 3 / Нужно ли обнулять handle в хеш-таблице?
» WarCraft 3 / Нужно ли обнулять handle в хеш-таблице?
Ред. nazarpunk
» WarCraft 3 / Как сделать респ мобов?
Ред. nazarpunk
» WarCraft 3 / Как сделать респ мобов?
» WarCraft 3 / Дать и забрать способность без локалок
» WarCraft 3 / Как сделать респ мобов?
Ред. nazarpunk
» WarCraft 3 / Как сделать респ мобов?
» WarCraft 3 / Как сделать респ мобов?
» WarCraft 3 / Как изменить скорость анимации у спрайта перезарядки?
» WarCraft 3 / Как изменить скорость анимации у спрайта перезарядки?
» WarCraft 3 / Как сделать анимацию перезарядки для кастомных кнопок (фреймов)?
» WarCraft 3 / Космодесантник
Ред. nazarpunk
» WarCraft 3 / Глючит карта
Ред. nazarpunk
» WarCraft 3 / Как сделать анимацию перезарядки для кастомных кнопок (фреймов)?
» WarCraft 3 / двумерный массив lua