XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Msey
????
offline
Опыт: 67,346
Активность:
Предназначение кода
Каков его смысл и нужен ли он в карте?


Код:
function AddHandleIndex takes handle h returns nothing
    local integer id=GetHandleId(h)
    local integer qi
  
    if HaveSavedInteger(tempcache,id,pos) then
      set qi=LoadInteger(tempcache,id,pos)
      set inUse[qi]=inUse[qi]+1
    elseif lastsize>0 then
      set lastsize             =lastsize-1
      set inUse[last[lastsize]]=1
      call SaveInteger(tempcache,id,pos,last[lastsize])
    else
      set inUse[indexsize]=1
      call SaveInteger(tempcache,id,pos,indexsize)
      set indexsize=indexsize+1
    endif
  endfunction
  
  function GetHandleIndex takes handle h returns integer
    debug if not HaveSavedInteger(tempcache,GetHandleId(h),pos) then
    debug call BJDebugMsg("Error:[#100]")
    debug endif
    return LoadInteger(tempcache,GetHandleId(h),pos)
  endfunction
  
  function ClearHandleIndex takes handle h returns nothing
    local integer id=GetHandleId(h)
    local integer qi=LoadInteger(tempcache,id,pos)
    
    debug if HaveSavedInteger(tempcache,id,pos) then
      set inUse[qi]=inUse[qi]-1
      if inUse[qi]==0 then
        set last[lastsize]=qi
        set lastsize      =lastsize+1
        call FlushChildHashtable(tempcache,id)
      endif
    debug else
    debug call BJDebugMsg("Error:[#101]")
    debug endif
  endfunction
endlibrary
Старый 19.02.2011, 23:37
J64_

offline
Опыт: 4,724
Активность:
Как бы возврашяет уменьшенный айди хендла. Чтоб можно было юзать этот айди для массивов. Примерно вот так set realunitvar[GetHandleIndex(h)]=1994.0. это так ГЕМОРНО сделано+использует хеш+требуется инитиализация для каждого хэндла, а можно просто создать интегер переменную и записать на нем ПЕРВЫЙ СОЗДАННЫЙ хэндл(ищи в InitBlizzard), ну и вычитать для юзания: set realunitvar[GetHandleId(h)-HANDLE_OFFSET]=1994.0, НО айди может быть ОГРОМНЫМ, то юзай несколько массивов+vjass структуры.
Старый 20.02.2011, 02:00
Msey
????
offline
Опыт: 67,346
Активность:
AdamanTX, Спасибо. Учту.
Старый 20.02.2011, 02:12
DioD

offline
Опыт: 45,134
Активность:
если не знаешь зачем нужен код - он не нужен.
Старый 20.02.2011, 08:58
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 08:15.