11

» WarCraft 3 / Удаление области

Вот, офигеваю от вопросов "за какой надобностью". Вот с той же проблемой столкнулся. Хочу максимально эффективно использовать память. Поэтму создал я ОДИН триггер и запихнул в нее одно действие. Создаю динамически события
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, ...). Опять таки ради эффективного использования памяти.

update но! Все тоже самое работает с
RegionAddCell(self.region, self.x, self.y)
RegionClearCell(self.region, self.x, self.y)
11

» WarCraft 3 / Руби лес!

arthas65536, на хайве быстрее выкладываем, но туда без ВПН сложно зайти www.hiveworkshop.com/threads/cut-wood.353020
Спасибо, обновлю ресурс не проверял это.
11

» WarCraft 3 / Руби лес!

Вышла новая версия!
Прокрутить к ресурсу
Главное
  • Карта полностью переписана на Lua.
  • Полностью переработанная и максимально оптимизированная система роста деревьев.
  • Оптимизированы все системы карты, что обеспечило стабильный геймплей, даже если участвует 21 игрок.
Юниты
  • Новый юнит: "Энт-воин" - самый сильный энт 5-го тира Духов леса; имеет 25 % шанс нанести 4-кратный урон при попадании.
  • Новый юнит: "Энт-моряк" - шанс 0,05 % появиться из металлической клетки или Магического ящика вместо капитана гоблинов; награда - 150000 дерева.
  • Добавлен дополнительный источник золота - магические деревья. За магические деревья можно получить золото в размере от 10 до 150 золота.
Баланс
  • Броня Черной горы теперь дает +5 защиты
  • Бонус к способности "Черная броня" увеличен с +1 до +2 к броне.
  • Уменьшение брони "Разлагающийся смрад" бомжей увеличено с -2 до -4.
  • Мародерство теперь крадет 30 золотых (было 20) и 2000 бревен (было 1000) за удар.
  • Добавлена награда за заброшенную шахту: теперь также можно получить 3000 дерева (всего 750 золотых + 3000 дерева).
  • Броня живого пня увеличена с 4 до 6
11

» WarCraft 3 / [2.0.3 vJass] UI - Move Able Frame - Перетаскиваем фрейм мышкой

под 1.26a
Да под 1.26 с мем хаком мне кажется проблем отслеживать мышку вообще не должно быть.
11

» WarCraft 3 / [2.0.3 vJass] UI - Move Able Frame - Перетаскиваем фрейм мышкой

его игра считает террейном
Ну тогда это же будут координаты разрушаемого объекта или проекции на землю? Это с любым разрушаемым объектом работает? А что если смотреть по линии горизонта и упираться в стену? Там же координаты высоты нету у мышки. Чет много вопросов. Но тема меня заинтересовала 🤓
11

» WarCraft 3 / [2.0.3 vJass] UI - Move Able Frame - Перетаскиваем фрейм мышкой

Корректнее будет пересчитать мировые координаты
Блин сама идея крутая. Токо вот работать это будет только с видом сверху , от третьего лица или от первого так не реализуешь. Текущее решение 6-ти летней давности, Самореклама.
11

» Администрация XGM / Проекты и структура сайта

А если создать подпроект для варкрафт, можно ли переносить публикации из "карта" внутрь подпроекта?
11

» WarCraft 3 / Баланс. Зачем в Warcraft 3 разброс урона и как этим пользоваться?

В варике кстати вероятности имеют биноминальное распределение видимо, а не нормальное насколько я понимаю, там кости и количество граней. Мы все знаем, конечно, центральую предельную теорему, но тем не менее немного духоты)))
11

» WarCraft 3 / Ищу карту по Warcraft 3 "Рука Бога"

Жаль что большинство этих типо крутых ландшафтов просто не играбельны, а сделанны просто для красивой картинки художниками расстановки дудадов. Советую искать не карту а пустой ландшафт без ничего другого в специальных разделах сайтов, тут или на хайве.
11

» WarCraft 3 / eventDispatcher - Диспетчер Событий

ScorpioT1000, насколько мне известно, ситуации, когда пишут слитно слова в нижнем регистре имеют место когда группа слов образуют единое понятие. Не знаю прописанно ли это в пепе, но сюда относятся слова такие как deepcopy, getattr, isininstance.
11

» WarCraft 3 / War3-lua-table

Вышла новая версия!
Прокрутить к ресурсу
Добавлены методы find, find_first, unique. Обновлена структура библиотеки.
11

» WarCraft 3 / eventDispatcher - Диспетчер Событий

ScorpioT1000, я принципами pep8 просто стараюсь пользоваться в луа. Не знаю насколько он тут пригоден, но кажется что это лучше чем без какого-то единообразия своего кода.
11

» WarCraft 3 / eventDispatcher - Диспетчер Событий

Немного улучшил читаемость кода и привел имена переменных в 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
11

» WarCraft 3 / Руби лес!

Вышла новая версия!
Прокрутить к ресурсу
Версия 1.2
Главное
  • Добавлены новые юниты, улучшения, исследования, способности и погодные условия.
  • Добавлена система страниц дяди и быстрый доступ к главной лесопилке через иконки рамок героев. Теперь игроки могут получить доступ к страницам исследований и найма двумя разными способами: с помощью страниц или фреймов. Эти методы синхронизированы друг с другом. Даже если вы выберетесь со склада и вернетесь на главную лесопилку, система сохранит и восстановит последнюю страницу, на которой вы были.
  • Добавлены рамки для рынка и машин.
  • Большое количество обновлений графики, баланса, исправлений ошибок и оптимизаций.
Юниты
  • Наемник: Новый юнит для усовершенствованной лесопилки. Стоит только золото и имеет способность «Pillage».
  • Эльфийский механизм: Новый юнит для эльфийской трудовой гильдии. Сильный юнит, требующий отдельного исследования «Механизмы». Имеет способность «Механизм» - (Леший вместо превращения в дерево наносит случайный урон цели). Лесоруб и Шредер также получают способность «Механизм».
Исследования
  • Разлагающая вонь: Бродяги получают способность уменьшать броню ближайших вражеских юнитов на 2.
  • Разграбление: Дает способность мародерства Дровосекам, Наемникам и Лесорубам.
  • Мародерство: Дает способность к мародерству уркам, раскаленным уркам, бронированным уркам и бронированным краснолюдам.
  • Перегрузка: Дает способность Шредеру и Логгеру увеличивать урон на 40% от базовой атаки на 10 секунд. Можно переключить на автокаст.
  • Алхимия: Предметы, которые приносят владельцу золото, когда их подбирают, становятся эффективнее на 130/160/200%.

??Готовим выход версии на lua??

11

» WarCraft 3 / Bandit Wars

Задумка - бомба. Жаль автор не кодер получили бы опупенную карту.
11

» WarCraft 3 / War3-lua-math

nazarpunk, по другой ссылке крипто метод на пайтоне. Вот это интересно было бы реализовать.
11

» WarCraft 3 / War3-lua-math

nazarpunk, точно, закинул в нейронку, попросил проанализировать. Правда в дешовую. Нейронка подороже мне ответила что:
GPT o1-Mini: Данный код реализует линейный конгруэнтный генератор (Linear Congruential Generator, LCG) с параметрами из ANSI C, а не алгоритм Mersenne Twister.