сделать тоже самое но только в проверке указать тип следующего юнита, и так столько раз сколько у тебя типов юнитов
В самом же вопросе указано:
например 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
И почему так сложно заглянуть в документацию?
Для шести значений можно и одномерный массив использовать
do
local mytable = {}
local length = 6
---@param player player
---@param num integer
---@param value any
function SetPlayerValue(player, num, value)
mytable[GetPlayerId(player) * length + num - 1] = value
end
---GetPlayerValue
---@param player player
---@param num integer
---@return any
function GetPlayerValue(player, num)
return mytable[GetPlayerId(player) * length + num - 1]
end
end
GetPlayerValue(GetTriggerPlayer(), 6) --> шестое значение для GetTriggerPlayer
Особенно видно даже не вглядываясь когда герой летит на большие расстояния со скоростью 2500-3000 ед. в секунду, он будет телепортироваться на дистанции по 90 единиц, это прям очень заметно и глаза режет.
Это из разряда: я хочу перенести героя на противоположный край карты за 1/100500 секунды, но он почему-то не летит плавно.
так это на стороне клиента а есть так серверный который определяет куки даже если украдете =)
Я крал у себя куки и авторизировался на vk и xgm. В куках хранится только токен сессии и он не отличает один браузер от точно такого же второго.
Можете прикрепить к сообщению содержимое C:\Users\<your_username>\AppData\Local\Google\Chrome\User Data\Default\ и посмотрите, как у меня ничего не получится))
С учётом того, что хранить через куки конфиденциальную информацию крайне глупо, тырить куки тоже глупо.
Подменив куки в своём браузере можно например получить авторизированную сессию. А ещё можно угнать файл паролей. Я для теста угнал его у себя и поместив их в хром на другом компе получил автоввод всех сохранённых паролей. Ну а Chrome Password Decrypter мне их прекрасно расшифровал.
Хотел даже статью написать, как это сделать, но мне пригрозили баном на веки вечные.
Формула возвращает длинну от бесконечной прямой линии, которая проходит через [Xa,Ya] [Xb,Yb]. Тобишь нужно ещё сделать проверку на то, что цель находится перед кастером.
Хотя вроде как должен учитываться физический размер.
При GroupEnumUnitsInRange не учитывается физический размер, поэтому нужно при наборе в группу добавлять к радиусу максимальный физ.размер, а уже при переборе проверять функцией IsUnitInRangeXY.
Или вообще выбирать всех юнитов и радиусе урона и считать перпендикуляр от прямой.
function Perpendicular takes real Xa,real Ya,real Xb,real Yb,real Xc,real Yc returns real
return SquareRoot((Xa - Xc) * (Xa - Xc) + (Ya - Yc) * (Ya - Yc)) * Sin(Atan2(Yc-Ya,Xc-Xa) - Atan2(Yb-Ya,Xb-Xa))
endfunction
Ред. nazarpunk
» WarCraft 3 / Как сделать респ мобов?
» WarCraft 3 / Как сделать респ мобов?
» WarCraft 3 / Как изменить скорость анимации у спрайта перезарядки?
» WarCraft 3 / Как изменить скорость анимации у спрайта перезарядки?
» WarCraft 3 / Как сделать анимацию перезарядки для кастомных кнопок (фреймов)?
» WarCraft 3 / Космодесантник
Ред. nazarpunk
» WarCraft 3 / Глючит карта
Ред. nazarpunk
» WarCraft 3 / Как сделать анимацию перезарядки для кастомных кнопок (фреймов)?
» WarCraft 3 / двумерный массив lua
» WarCraft 3 / двумерный массив lua
Для шести значений можно и одномерный массив использовать
» WarCraft 3 / Как сделать так, чтобы магазин не мог ничего продать игроку
Ред. nazarpunk
» WarCraft 3 / Расстояние до цели
» WarCraft 3 / Как сделать рывок в версии 1.26?
» WarCraft 3 / Как сделать рывок в версии 1.26?
» WarCraft 3 / Приведите примеры работы с SetUnitLookAt
Ред. nazarpunk
» WarCraft 3 / Приведите примеры работы с SetUnitLookAt
» WarCraft 3 / Приведите примеры работы с SetUnitLookAt
» WarCraft 3 / Расстояние до цели
Ред. nazarpunk
» WarCraft 3 / Как сделать рывок в версии 1.26?
Ред. nazarpunk
» WarCraft 3 / Приведите примеры работы с SetUnitLookAt
» WarCraft 3 / Как сделать рывок в версии 1.26?
» WarCraft 3 / Приведите примеры работы с SetUnitLookAt
» WarCraft 3 / Расстояние до цели
Ред. nazarpunk
» WarCraft 3 / Урон по линии
Ред. nazarpunk
» WarCraft 3 / Урон по линии