0
26
2 года назад
0

» WarCraft 3 / Hashtable - работаем с хеш-таблицей

Закончим тем, что фактической необходимости в удалении хештаблицы - нет
Да. Если не создаешь, то и удалять не надо. А глобальные в любом случае существуют всю игру.
ибо за всё это время ещё никто не жаловался на лимит хештаблиц.
Не совсем так xgm.guru/p/wc3/hashtable8000
0
26
2 года назад
Отредактирован Hanabishi
0

» WarCraft 3 / Hashtable - работаем с хеш-таблицей

Говоря проще, твой юзкейс - это полноценный бред, который не встречается нигде.
Так статья на то и нужна, что предупреждает людей так не делать. Ты ведь не думаешь, что зашедшие читать эту статью знают правильные юзкейсы?
Может там конечно не совсем ясно донесена мысль, но суть такая: не создавайте таблицы в больших количествах. Все остальное вы уже начинаете додумывать.
1
26
2 года назад
Отредактирован Hanabishi
1

» WarCraft 3 / Hashtable - работаем с хеш-таблицей

Unryze, ты видимо как-то криво отвечаешь. Вот с твоей же цитаты.
Ты сам придумал про единожды, а я изначально сразу указал кейс.
Весь поинт сообщения как раз в том, что лучше создавать только ограниченное количество таблиц на карту. Потому что могут найтись уникумы, которые на каждый каст будут новую таблицу заводить. Так что я не знаю что там придумать пытаетесь.
Загруженные файлы
0
26
2 года назад
0

» WarCraft 3 / Hashtable - работаем с хеш-таблицей

40 байт единожды потерять, не знаю даже.
Почему единожды? Я говорю, если локальные таблицы постоянно создавать. В цикле например или на каких-то событиях.
Непонятно какая речь про жалкость 40 байт, если люди умудряются память даже точками засрать, которые казалось бы имеют размер еще меньше.
Суть в том, что если есть объект, который можно создать, но нельзя удалить, это утечка. В варе такого дофига.
0
26
2 года назад
0

» WarCraft 3 / Hashtable - работаем с хеш-таблицей

Спустя 10 лет еще кому-то не пофиг? Вообще я в комментах отвечал, что имелось в виду.
У нас нет действия типа DestroyHashtable, то есть таблицы нельзя удалять. Поэтому если в каком-то действии постоянно создаются таблицы, память будет течь.
То бишь 0x34 байта выделены всегда, каждая ХТ по стандарту - это 0x28 байт опять, и каждая новая ячейка - 4 байта (исключение boolean (1 байт) и string (каждый символ = 1 байт)).
Здесь главный вопрос деаллокается ли память обратно при удалении элементов. Если да, то утечку памяти хотя бы можно минимизировать очисткой. Если нет, то это вообще жопа и мое утверждение верно на 100%.
0
26
2 года назад
0

» Администрация XGM / Не размещается на главной

Зато он есть в RSS и перепостился ботом.
1
26
2 года назад
1

» Unity / unity nullreferenceexception

У тебя массив пустой. И при чем здесь велосипеды, элементы за тебя кто должен создавать?

Кажись лента забаговала
Нет, это ты 5 дубликатов вопроса создал.
0
26
2 года назад
Отредактирован Hanabishi
0

» Администрация XGM / Баг репостных ресурсов

Бот ни при чем. Такая каша уже выдается в rss.
Тег не закрыт, потому невалидный html не эскейпится.
Загруженные файлы
0
26
3 года назад
0

» Прочее / Windows 11 – Discussion

Процессор не помню...
А нам ты вангануть предлагаешь? Процессоры с плашкой i3-i5-i7 выходят уже более 10 лет.
11 винда поддерживает интелы с 8 поколения (модели с маркировкой 8000, вышли в конце 2017 года). Маркировку своего процессора можешь найти самостоятельно.
0
26
3 года назад
0

» Администрация XGM / Отображать все ресурсы и комментарии пользователя

А они нужны? Скрытые ресурсы и комменты отображаются на счетчиках пользователя, но при переходе в список их нет.

Заходишь в профиль xgm.guru/user/100319, написано 2 ресурса. Жмешь, а там пусто.
0
26
3 года назад
0

» Администрация XGM / Не вижу рейтинг

Только админ имеет такие права, которые ты указал.
Даже я не имею, лол.
Статистику МП+
А, ну значит все правильно, Берги просто не манагер. Но по идее логичнее бы сделать СМ+ доступ к этой функции.
2
26
3 года назад
2

» WarCraft 3 / Проекты варкрафта

Игре почти 20 лет, из которых уже больше половины срока ее закапывают и объявляют мертвой. Но разумеется всегда и на все находятся некроманты.
И на самом деле лично я например вообще не понимаю зачем в нее продолжают приходить новые люди. В "лихие" нулевые у нас особо не было выбора, не было толком интернета. У большинства просто не было возможности накачать и наставить любых игр как сейчас, да и в целом их на порядки меньше было. Поэтому, для расширения доступного контента, приходилось выдумывать развлечения самостоятельно в виде пользовательских сценариев и модов к имеющимся играм. И возможность обмениваться ими с другими было уже по-своему чудом (помню времена, когда даже просто скачать или залить карту весом в пару мегабайт было достижением, а еще у нас даже была оффлайн база статей для чтения без интернета).
Сейчас же можно качать и ставить новую игру хоть каждый день, неограниченно читать и смотреть любые ресурсы, и вообще делать что угодно. А для любителей творчества придумали кучу более продвинутых игровых движков и редакторов.
Собственно поэтому основная масса более-менее рукастых разработчиков и ушла на другие технологии, так как что угодно будет лучше и переспективнее, чем престарелый вар3. К чему мы всех остальных и призываем тоже.
3
26
3 года назад
3

» WarCraft 3 / Что быстрее ForGroup() или Loop?

Если быть достаточно неаккуратным - будет. Например вот такой вот код, при использовании глобалок сработает совсем не так, как ожидалось:
Можешь сделать эти переменные локальными - ничего не поменяется. Этот код всегда будет работать так, как ты его написал. Никаких зависимостей от внешних условий тут нет.
2
26
3 года назад
2

» WarCraft 3 / Что быстрее ForGroup() или Loop?

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

Пожалуйста пруфы
Ну я так понимаю тут суть в том, что при пике через булэкспр в группу вообще не заносятся юниты. То есть связный список вообще не задействуется, и заниматься очисткой тоже потом не надо.
Хотя в реалиях варкрафта конечно все надо проверять на практике, так как разрабы были очень кривые.
5
26
3 года назад
5

» WarCraft 3 / Создание ИИ

Ты сам даешь им приказ двигаться через атаку, вместо того чтобы просто идти. Какой еще результат ожидается?
0
26
3 года назад
0
0
26
3 года назад
0
4
26
3 года назад
Отредактирован Hanabishi
4

» WarCraft 3 / Утечки в коде

Да, в самом коде тоже можно оптимизировать. Про вынос стрингхешей уже сказали.
Еще например функция GetWorldBounds(), насколько помнится, создает новый рект каждый вызов. То есть его как минимум надо удалять после этого. А лучше только один раз ее вызвать и тоже просто загнать в глобалку на всю игру. Или можно пользоваться БЖшной глобалкой bj_mapInitialPlayableArea (но она учитывает только играбельную зону карты, без черных краев).
2
26
3 года назад
2

» WarCraft 3 / Утечки в коде

  1. Для таймера в 0.01 оптимизация все же важна
  2. Группу надо 1 глобальную. И вообще не добавлять в нее юнитов, а все делать в фильтре.
globals
    group TWGroup = CreateGroup()
endglobals

function TerribleWounds_Filter takes nothing returns boolean
    local unit TWUnit = GetFilterUnit()
    local real TerribleWoundsCount = LoadReal(H, GetHandleId(TWUnit), StringHash("TerribleWoundsCount"))
    local real UnitLifeOld = LoadReal(H, GetHandleId(TWUnit), StringHash("UnitLifeOld"))
    local real UnitLifeNow = GetUnitState(TWUnit, UNIT_STATE_LIFE)

    if TerribleWoundsCount > 1 then
        set TerribleWoundsCount = 1
    endif

    if (UnitLifeOld < UnitLifeNow) and UnitLifeOld != 0 and TerribleWoundsCount != 0 then
        call SetUnitState(TWUnit, UNIT_STATE_LIFE, (UnitLifeNow - (UnitLifeNow - UnitLifeOld) * TerribleWoundsCount))
    endif

    set UnitLifeOld = GetUnitState(TWUnit, UNIT_STATE_LIFE)
    call SaveReal(H, GetHandleId(TWUnit), StringHash("UnitLifeOld"), UnitLifeOld)

    set TWUnit = null

    return false
endfunction

function Trig_TerribleWounds_Actions takes nothing returns nothing
    call GroupEnumUnitsInRect(TWGroup, GetWorldBounds(), Filter(function TerribleWounds_Filter))
endfunction

//===========================================================================
function InitTrig_TerribleWounds takes nothing returns nothing
    local trigger TerribleWoundsTrigger

    set TerribleWoundsTrigger = CreateTrigger( )
    call TriggerRegisterTimerEvent(TerribleWoundsTrigger, 0.01, true)
    call TriggerAddAction(TerribleWoundsTrigger, function Trig_TerribleWounds_Actions)

    set TerribleWoundsTrigger = null
endfunction
4
26
3 года назад
4

» Мир безумного / Warcraft 3 Reforged на Unreal Engine 5

Но оно видимо так не работает.
Естественно. За все время уже было огромное множество улучшенных и полностью переделанных вариаций игры, но это никому не нужно на деле.
Как гласит древняя цитата: "Есть два типа бесполезных проектов: варкрафт на движке другой игры, и другая игра на движке варкрафта."
0
26
3 года назад
0

» WarCraft 3 / Русский JNGP Rebuil 1.4

Язык в JNGP будет такой же, как и в игре. Так что тут 2 варианта:
  1. Какая-то корявая версия игры.
  2. Какая-то левая версия JNGP. Удали и еще раз скачай установщик отсюда.
0
26
3 года назад
0

» WarCraft 3 / Зачем 50% декораций в редакторе?

SANTIMEL, ну так адресуй вопрос в близзард тогда. У них многие решения кривые. Мы тут ничем помочь не можем.
0
26
3 года назад
0

» WarCraft 3 / Зачем 50% декораций в редакторе?

Я гифке показал, что путь проходимости, меняется.
Только ровно по 90 градусов. По диагонали и любой другой произвольный поворот нужно новую отдельную текстуру пути делать.
0
26
3 года назад
0

» Программирование / Как быстро вписывать конец тега.

Да, перейди на нормальную IDE. Тот же VS Code все умеет.
Загруженные файлы
1
26
3 года назад
1

» Администрация XGM / Планируют ли разработчики XGM, сделать поиск по разделу Вопросы?

Например мой вопрос «Как расшифровывается аббревиатура XGM ?»
За три года, на него так и не удосужились ответить …
Скрытый проект, скрытый вопрос, очевидно ведь его никто не видит.
Xtreme Gamedev & Modmaking