Вот, офигеваю от вопросов "за какой надобностью". Вот с той же проблемой столкнулся. Хочу максимально эффективно использовать память. Поэтму создал я ОДИН триггер и запихнул в нее одно действие. Создаю динамически события
function Object:init_object()
self.region = CreateRegion()
local rect = Rect(xmin, ymin, xmax, ymax)
Object.region_rect_link[region] = rect
TriggerRegisterEnterRegion(Object.enter_trigger, region, nil)
RegionAddRect(region, rect)
end
Затем мне надо отключить одно из событий, козалось бы, просто
function Object:deactivate_region()
local rect = self.region_rect_link[self.region]
RegionClearRect(self.region, rect)
end
А это просто не работает, триггер с регионом работает будто его (регион) и не очищали от ректа. Однако
function Object:deactivate_region()
local rect = self.region_rect_link[self.region]
RemoveRegion(self.region)
end
работает и событие не проигрывается, но цель отключить событие, что бы затем переназначить rect на другой bounding box (xmin, xmax, ...). Опять таки ради эффективного использования памяти.
Ну тогда это же будут координаты разрушаемого объекта или проекции на землю? Это с любым разрушаемым объектом работает? А что если смотреть по линии горизонта и упираться в стену? Там же координаты высоты нету у мышки. Чет много вопросов. Но тема меня заинтересовала 🤓
Блин сама идея крутая. Токо вот работать это будет только с видом сверху , от третьего лица или от первого так не реализуешь. Текущее решение 6-ти летней давности, Самореклама.
В варике кстати вероятности имеют биноминальное распределение видимо, а не нормальное насколько я понимаю, там кости и количество граней. Мы все знаем, конечно, центральую предельную теорему, но тем не менее немного духоты)))
Жаль что большинство этих типо крутых ландшафтов просто не играбельны, а сделанны просто для красивой картинки художниками расстановки дудадов. Советую искать не карту а пустой ландшафт без ничего другого в специальных разделах сайтов, тут или на хайве.
ScorpioT1000, насколько мне известно, ситуации, когда пишут слитно слова в нижнем регистре имеют место когда группа слов образуют единое понятие. Не знаю прописанно ли это в пепе, но сюда относятся слова такие как deepcopy, getattr, isininstance.
ScorpioT1000, я принципами pep8 просто стараюсь пользоваться в луа. Не знаю насколько он тут пригоден, но кажется что это лучше чем без какого-то единообразия своего кода.
Немного улучшил читаемость кода и привел имена переменных в snake_case. Может заинтересует.
do
---@class EventDispatcher
EventDispatcher = EventDispatcher or {}
EventDispatcher.__meta = {
__index = EventDispatcher
}
-- Конструктор класса
function EventDispatcher:create()
local obj = {
event_dict = {}
}
return setmetatable(obj, EventDispatcher.__meta)
end
-- Подписаться на событие
---@param eventName string
---@param callback function
function EventDispatcher:subscribe(event_name, callback)
if not self.event_dict[event_name] then
self.event_dict[event_name] = {}
end
table.insert(self.event_dict[event_name], callback)
end
table.find = table.find or function(tbl, item)
local idxs = {}
for i = 1, #tbl do
if tbl[i] == item then
table.insert(idxs, i)
end
end
return idxs
end
-- Отписаться от события
---@param eventName string
---@param specialCallback function (опционально)
function EventDispatcher:unsubscribe(event_name, subscriber)
if subscriber == nil then return nil end
local subscribers = self.event_dict[event_name]
if subscribers == nil then return end
if subscriber == nil then
self.subscribers[event_name] = nil
end
-- поиск подписчиков в массиве подписчиков события
idxs = table.find(subscribers, subscriber)
for _, idx in ipairs(idxs) do
table.remove(subscribers, i)
end
-- Если после удаления нет обработчиков, удаляем событие
if #callbacks == 0 then
self.handlers[event_name] = nil
end
end
-- Отправить событие
---@param eventName string
---@param data any (опционально)
function EventDispatcher:dispatch(event_name,...)
local subscribers = self.event_dict[event_name]
if callbacks == nil then return end
-- Создаём копию списка обработчиков, чтобы избежать возможных изменений во время итерации
local subscribers_copy = { table.unpack(callbacks) }
for _, subscribers in ipairs(subscribers) do
subscriber(...)
-- subscriber(table.unpack(table.deepcopy({...}))) -- другой вариант
end
end
-- Удалить все обработчики
function EventDispatcher:clear()
self.handlers = {}
end
setmetatable(EventDispatcher, {__call = EventDispatcher.create})
end
Добавлены новые юниты, улучшения, исследования, способности и погодные условия.
Добавлена система страниц дяди и быстрый доступ к главной лесопилке через иконки рамок героев. Теперь игроки могут получить доступ к страницам исследований и найма двумя разными способами: с помощью страниц или фреймов. Эти методы синхронизированы друг с другом. Даже если вы выберетесь со склада и вернетесь на главную лесопилку, система сохранит и восстановит последнюю страницу, на которой вы были.
Добавлены рамки для рынка и машин.
Большое количество обновлений графики, баланса, исправлений ошибок и оптимизаций.
Юниты
Наемник: Новый юнит для усовершенствованной лесопилки. Стоит только золото и имеет способность «Pillage».
Эльфийский механизм: Новый юнит для эльфийской трудовой гильдии. Сильный юнит, требующий отдельного исследования «Механизмы». Имеет способность «Механизм» - (Леший вместо превращения в дерево наносит случайный урон цели). Лесоруб и Шредер также получают способность «Механизм».
Исследования
Разлагающая вонь: Бродяги получают способность уменьшать броню ближайших вражеских юнитов на 2.
Разграбление: Дает способность мародерства Дровосекам, Наемникам и Лесорубам.
Мародерство: Дает способность к мародерству уркам, раскаленным уркам, бронированным уркам и бронированным краснолюдам.
Перегрузка: Дает способность Шредеру и Логгеру увеличивать урон на 40% от базовой атаки на 10 секунд. Можно переключить на автокаст.
Алхимия: Предметы, которые приносят владельцу золото, когда их подбирают, становятся эффективнее на 130/160/200%.
nazarpunk, точно, закинул в нейронку, попросил проанализировать. Правда в дешовую. Нейронка подороже мне ответила что:
GPT o1-Mini: Данный код реализует линейный конгруэнтный генератор (Linear Congruential Generator, LCG) с параметрами из ANSI C, а не алгоритм Mersenne Twister.
» WarCraft 3 / Удаление области
» WarCraft 3 / Руби лес!
Спасибо, обновлю ресурс не проверял это.
» Администрация XGM / Способность "Портал из прошлого" не отрабатывает
» WarCraft 3 / Руби лес!
Прокрутить к ресурсу
» WarCraft 3 / [2.0.3 vJass] UI - Move Able Frame - Перетаскиваем фрейм мышкой
» WarCraft 3 / [2.0.3 vJass] UI - Move Able Frame - Перетаскиваем фрейм мышкой
» WarCraft 3 / [2.0.3 vJass] UI - Move Able Frame - Перетаскиваем фрейм мышкой
Ред. Koladik
» WarCraft 3 / [2.0.3 vJass] UI - Move Able Frame - Перетаскиваем фрейм мышкой
» Администрация XGM / Способность "Портал из прошлого" не отрабатывает
» Администрация XGM / Способность "Портал из прошлого" не отрабатывает
» WarCraft 3 / Gnome Tinker - Gunstrider (Hero + Unit + Ammo)
» Администрация XGM / Проекты и структура сайта
» WarCraft 3 / Баланс. Почему в Warcraft 3 рост брони НЕ идёт по убывающей полезности. Развенчиваем мифы.
Ред. Koladik
» WarCraft 3 / Баланс. Зачем в Warcraft 3 разброс урона и как этим пользоваться?
» WarCraft 3 / Ищу карту по Warcraft 3 "Рука Бога"
» WarCraft 3 / eventDispatcher - Диспетчер Событий
» WarCraft 3 / War3-lua-table
Прокрутить к ресурсу
» WarCraft 3 / eventDispatcher - Диспетчер Событий
Ред. Koladik
» WarCraft 3 / eventDispatcher - Диспетчер Событий
Ред. Koladik
» WarCraft 3 / Руби лес!
Прокрутить к ресурсу
Главное
- Добавлены новые юниты, улучшения, исследования, способности и погодные условия.
- Добавлена система страниц дяди и быстрый доступ к главной лесопилке через иконки рамок героев. Теперь игроки могут получить доступ к страницам исследований и найма двумя разными способами: с помощью страниц или фреймов. Эти методы синхронизированы друг с другом. Даже если вы выберетесь со склада и вернетесь на главную лесопилку, система сохранит и восстановит последнюю страницу, на которой вы были.
- Добавлены рамки для рынка и машин.
- Большое количество обновлений графики, баланса, исправлений ошибок и оптимизаций.
Юниты- Наемник: Новый юнит для усовершенствованной лесопилки. Стоит только золото и имеет способность «Pillage».
- Эльфийский механизм: Новый юнит для эльфийской трудовой гильдии. Сильный юнит, требующий отдельного исследования «Механизмы». Имеет способность «Механизм» - (Леший вместо превращения в дерево наносит случайный урон цели). Лесоруб и Шредер также получают способность «Механизм».
ИсследованияРед. Koladik
» WarCraft 3 / Bandit Wars
» WarCraft 3 / War3-lua-math
» WarCraft 3 / War3-lua-NDArray
Ред. Koladik
» WarCraft 3 / War3-lua-math