WarCraft 3: Кэш

Создание простого stomp спелла

Кэш

Хотя тип gamecache, изначально задумывался для обмена данными между миссиями кампании, он может использоваться для много другого. В основном для формирования двумерных массивов и баз данных.
Перед тем как я продолжу, немного проясню этот вопрос, чтобы в дальнейшем не было недопониманий.
Кэш НЕ работает в мультиплеере, если вы хотите сохранить данные, предполагая загрузить их в будущем, или если вы хотите восстановить данные из кэша предыдущей игры.
Однако, кэш, отлично РАБОТАЕТ во ВСЕХ типах игры, включая мультиплеер, если все данные, которые вы сохраняете и загружаете, используются только в рамках текущей игры.
Это значит, что НЕ возникнет никаких проблем, во время использования его в качестве двухмерного массива или базы данных в мультиплеере, все будет работать отлично.
Я также рекомендую вам прочитать этот пост, который содержит объяснение нескольких ограничений и ошибок gamecache.
(Прим. прев. Ограничения заключаются в следующем: существует лимит в 256 инициализированных кэш объектов. После превышения лимита, функция инициализации кэш объекта начинает возвращать значение null. Очистка (flush) кэш объектов не уменьшает лимит. Очистка кэша с именем, например, "cache.w3v" и затем инициализация кэша с таким же именем, приводит к тому, что займутся 2 'ячейки', то есть это не является способом обойти лимит. Во время загрузки игры в синглплеере, загружаются и все сохраненные в этом профиле игрока кэши, и все они занимают 'ячейки', и если случится, так что окажутся занятыми все 256 'ячеек' то больше НИ ОДНА карте не сможет инициализировать новый кэш объект. Если вы сохраняете кэш своей карты, то при следующей загрузке этой карты у вас будет меньше 'ячеек' для кэшей)
Что ж, сейчас можно приступить к работе. В редакторе переменных создайте переменную типа gamecache.
Я назову ее "AbilityCache" ("udg_AbilityCache" в терминах JASS), мы собираемся использовать эту переменную, для хранения в ней данных спелла.
Создайте новый триггер, используя GUI, и назовите его InitCache, затем преобразуйте его в JASS:
function Trig_InitCache_Actions takes nothing returns nothing
endfunction

//===========================================================================
function InitTrig_InitCache takes nothing returns nothing
    set gg_trg_InitCache = CreateTrigger(  )
    call TriggerAddAction( gg_trg_InitCache, function Trig_InitCache_Actions )
endfunction
Большинство из всего этого просто не нужно, так как мы используем этот триггер лишь для инициализации кэша. Удалите весь код снаружи и внутри функции InitTrig_InitCache, за исключением строк function и endfunction:
function InitTrig_InitCache takes nothing returns nothing
endfunction
Сейчас нам необходимо, добавить несколько строк кода внутри функции InitTrig_InitCache, для инициализации кэша. Во-первых, мы добавим строку инициализации и одновременной очистки кэша, на случай его сохранения в предыдущей игре. Делая это, мы очищаем кэш от любых данных, что позволяет избежать проблем, возникающих при конфликте данных из предыдущей и текущей игр.
Строка инициализации и очистки кэша выглядит следующим образом:
   call FlushGameCache(InitGameCache("abilitycache.w3v"))
Я использую "abilitycache.w3v" как имя файла кэша.
Теперь добавим другую строку, которая действительно инициализирует кэш:
    set udg_AbilityCache = InitGameCache("abilitycache.w3v")
JASS триггер InitCache выглядит следующим образом:
function InitTrig_InitCache takes nothing returns nothing
    call FlushGameCache(InitGameCache("abilitycache.w3v"))
    set udg_AbilityCache = InitGameCache("abilitycache.w3v")
endfunction
Все остальное про использование кэша, будет рассказано далее.

Просмотров: 6 181

Ratssor #1 - 2 года назад 0
так как дальше работать из кешем ?