сделать тоже самое но только в проверке указать тип следующего юнита, и так столько раз сколько у тебя типов юнитов
В самом же вопросе указано:
например 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 мне их прекрасно расшифровал.
Хотел даже статью написать, как это сделать, но мне пригрозили баном на веки вечные.
» 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
» 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 / Расстояние до цели