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.
11

» WarCraft 3 / War3-lua-math

nazarpunk, потому что полезный. Его польза перекрывает его дешивизну. Поэтому мне кажется унизительно для него назвать его дешевым. ;D
11

» WarCraft 3 / War3-lua-math

nazarpunk, я сразу код смотрел, не читал статью. Мне показался похожим на этот алгоритм. Ошибся получается.
11

» WarCraft 3 / War3-lua-math

nazarpunk, ааа посмотрел, у тебя тоже Twister как понимаю. А вообще имеет смысл свой алгоритм генерации внедрять? Хороший алгоритм нашел тут
11

» WarCraft 3 / War3-lua-math

nazarpunk, да не, я просто хотел пуассоновское распределение хорошее, заметил, что его генерация не такая простая задача, если делать оптимально. Ну и вдовесок закинул еще распределений на будущее. Если ты имеешь в виду генератор свой, то очень хороший источник тут.
11

» WarCraft 3 / War3-lua-table

Вышла новая версия! Прокрутить к ресурсу
Обновлен API, расширен список функций (multiply, subtract,..., merge). Добавлен генератор пустых таблиц, table.empty.
Cправка:
table.empty нужен если вы генерируете множество пустых таблиц через функцию, чтобы в разные места попадала ссылка не на одну таблицу, а на множество различных. Такой метод называют фабричным.
11

» WarCraft 3 / Лучник Ночных Эльфов

Lyova2, ну вообще да , я посмотрел даже друид-ворон в варике по сути голый. Хотя у всех есть какой-то намек на одежду) Вот еще реф хороший.
11

» WarCraft 3 / Музыка карты в лобби (Reforged)

FIRERANGER, Нужно создать карту которая изначально луа поддерживает. Но предположу, что можно адаптировать этот скрипт под jass.
11

» WarCraft 3 / Лучник Ночных Эльфов

Но ведь в варкрафте есть ночная эльфийка - лучник. Это типо мужская версия?
Не хочу обидеть учитывая, что автор пишет, что проделал большую работу, но лицо прям пластиковое и разрез в глаза бросается. Я не уверен, что мужики эльфы экзгибицианисты :D