Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
vJass
Тип:
Алгоритм
Версия Warcraft:
1.26a+
Как известно, функцию InitHashtable() можно вызывать ограниченное количество раз. Поэтому для динамического выделения нативных хеш-таблиц нужен буфер, с помощью которого можно было бы переиспользовать уже созданные хеш-таблицы. Данная библиотека предоставляет 2 метода:
local hashtable ht = HT_create() // для получения hashtable из буфера
call HT_destroy(ht) // для отправки hashtable в буфер
Повторный вызов HT_destroy() ничего не сломает. Если использовать методы одной библиотеки внутри другой, то ее следует указать в зависимостях.
library HT
    globals
        private hashtable array ht
        private boolean array allocated
        private integer max = -1
    endglobals
    
    public function create takes nothing returns hashtable
        local integer i = 0
        loop
        exitwhen i > max
            if not allocated[i] then
                set allocated[i] = true
                return ht[i]
            endif
        set i = i+1
        endloop
        set max = max+1
        set ht[max] = InitHashtable()
        set allocated[max] = true
        return ht[max]
    endfunction
    
    public function destroy takes hashtable h returns nothing
    local integer i = 0
    if h != null then
        loop
        exitwhen i > max
            if ht[i] == h then
                set allocated[i] = false
                return
            endif
        set i = i+1
        endloop
    endif
    endfunction
    
endlibrary
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
19
3 года назад
0
GetLocalPlayer, Что тут сложного? Зачем более 1 хэштаблицы? На структурах все сохраняется, хотя можно и без них.

GetLocalPlayer, А можно пример способности?
0
17
3 года назад
Отредактирован GetLocalPlayer
0
GetLocalPlayer, А можно пример способности?
Просто описать? Тогда яд.
Травит цель, нанося 100 ед. урона каждую секунду в течении 15 секунд. Перезарядка 1 секунда. Эффекты от разных кастеров на одну цель друг друга не перебивают, каждый работает индивидуально.
0
19
3 года назад
0
GetLocalPlayer, Если сделаю с одной хэш-таблицей мне полагается приз?
0
17
3 года назад
0
KaneThaumaturge:
GetLocalPlayer, Если сделаю с одной хэш-таблицей мне полагается приз?
Тебя куда-то не туда унесло.
0
32
3 года назад
0
Сделаю без единой хештаблицы на гуи в пачте Roc 1.00 или на ретурбаге, мы же соревнуемся на самую убогую и костыльную реализацию одного и того же?
0
19
3 года назад
0
Тебя куда-то не туда унесло.
Мне просто правда интересно зачем это и как можно использовать. В описанной тобой способности данные просто сохраняются на хэндл таймера, все работает индивидуально и не перебивает друг друга.
0
17
3 года назад
Отредактирован GetLocalPlayer
0
В описанной тобой способности данные просто сохраняются на хэндл таймера, все работает индивидуально и не перебивает друг друга.
Хорошо, мы сохраняем данные по хэндлу таймера. Затем я применил яд повторно, до того как он закончил свое действие. То есть, обновил оставшееся время действия. Как я найду таймер, чтобы обновить данные?
0
21
3 года назад
Отредактирован scopterectus
0
GetLocalPlayer, просто создаешь еще один таймер, они же работают индивидуально. К тому же таймер один из самых лёгких объектов в игре. Все лучше, чем создавать ещё одну хеш-таблицу.
4
28
3 года назад
Отредактирован PT153
4
GetLocalPlayer, у меня это сделано структурами и на одной хештаблице.

Сейчас вообще Hate придёт и скажет, что хештаблица тут не нужна.
0
17
3 года назад
0
quq_CCCP, одновременно использоваться могут и 3-7, главное, что они динамически выделяются и освобождаются
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.