Мне нужен такой handle объект, создание которого, бы генерировало уникальный handleID при этом занимало минимальное количество памяти. Для того, чтобы можно было сохранять на его ID в хештаблицу другой ID такого же простого объекта, на которой можно было сохранять еще один handle, и так далее
Я это вижу примерно следующим образом
set handle1 = CreateHandle()//функция создания какого-то виртуального объекта, который я ищу
set handle2 = CreateHandle()
set handle3 = CreateHandle()
local integer ID_1 = GetHandleId(handle1)
local integer ID_2 = GetHandleId(handle2)
local integer ID_3 = GetHandleId(handle3)
set mainHash =  InitHashtable()
call SaveInteger(mainHash,ID_1,0,ID_2)
call SaveInteger(mainHash,ID_2,0,ID_3)
Вообще, очевидно, что мне просто нужно резервировать уникальный простой handleID, чтобы можно было вереницей доставать потом объекты, чтобы создавать что-то похожее на список. Но какой тип для этого мне подходит?

Используйте структруры или lua.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
32
Ну agent, это такой универсальный тип для сохранения в хештаблицу. Хендлы - указатели, места сами по себе они занимают одниакого, ибо тупо целые числа, а вот сами обьекты занимают память исходя из своей структуры. Таймер с локейшином самые легкие хенлдлы, герои самые тяжелые.
Так же можно почитать про Fogstate exploit - первая ссылка в поиске тык
11
Vlod:
Нужен набор ссылок handle, или набор уникальных ID (integer-ов)?
Какой язык, jass/.../lua?
Как я понимаю, второе встроено в jass, таким образом, что при создании handle резервируется и уникальный ID, формально мне нужно просто резервировать какой-то handleID, а потом по возможности, удалять резерв. Пишу на чистом jass в версиях 1.31-1.32
Hate:
зачем?
Чтобы имелась возможность создать дерево, например, под ID игрока записать много пустых других ID каждый из которых под свою уникальную задачу, которые могли также ссылаться на еще какие-то пустые ID
quq_CCCP, да, я видел этот тип но так и не нашел как его создать в чистом виде, так-как мне сначала показалось, что он и есть то, что мне нужно
NazarPunk, мне показалось на jass структуры реализованы слишком костыльно. Я не помню, чтобы в jass можно было хранить в структуре туже самую в структуру (ссылку на нее), тем более, что структуру нельзя хранить в хештаблице.
На счет луа, наверное, это лучший вариант но пока нормальную официальную поддержку не завезли и я не знаю как он тут может мне помочь, разве, что там имеется возможность напрямую выделять место в памяти как в c++
18
globals //UID
  integer UIDSttPoint
  integer array UIDStt
endglobals

function initialization takes nothing returns nothing
  set UIDSttPoint = 1
  set UIDStt[0] = 1
endfunction

function GetUID takes nothing returns integer // получить Id
  local integer N = UIDSttPoint
  if (UIDSttPoint == UIDStt[0]) then
    set UIDSttPoint = UIDSttPoint + 1
    set UIDStt[0] = UIDSttPoint
  else
    set UIDSttPoint = UIDStt[UIDSttPoint]
  endif
  return N
endfunction

function FreeUID takes integer N returns nothing // освободить Id
  set UIDStt[N] = UIDSttPoint
  set UIDSttPoint = N
endfunction
Будет выдавать Id начиная с 1. Если Id не освобождать, то может перестать работать, когда количество занятых Id станет больше, чем максимальная длинна массива в данной версии.
30
На счет луа, наверное, это лучший вариант но пока нормальную официальную поддержку не завезли
Как это не завезли? И как это люди умудряются писать без официальной поддержки?
11
NazarPunk, да я не про то. Конечно, можно поставить себе vs code несколько неофициальных утилит и жить почти в шоколаде? О чем говорить , если в чистом варике без JNGP никогда не было подсветки синтаксиса в jass. Но все это неофициальные утилиты.
30
О чем говорить , если в чистом варике без JNGP никогда не было подсветки синтаксиса в jass
И вы думаете что-то изменится?
Можно вообще самому написать себе сборщик и не мучаться)
11
Vlod, я попробовал, спасибо, это решает мою проблему, если нельзя резервировать handleID без создания тяжелого объекта, спасибо за хороший вариант, однако не решает ее в глобальном смысле. Потому, что для этой нумерации придется отдельную хэштаблицу создавать.
NazarPunk:
И вы думаете что-то изменится?
Ну я думаю, что да jasshelper то они официально добавили раньше и его не было.
30
Ну я думаю, что да jasshelper то они официально добавили раньше и его не было.
В нём не так много возможностей, как у современной IDE, и врятли близы будут добавлять функционал по работе с кодом.
26
Хмм возможно я что то не так понял, но разве key не подходит как пустой хендл?
globals
key MyHandle
endglobals
24
Ну я думаю, что да jasshelper то они официально добавили раньше и его не было.
Не смешите моего вымышленного кота... Добавленый близами жассхелпер добавлен криво, работает хуже чем в JNGP, не обновляется, требует костылей и пинков под зад для нормальной работы, не может быть обновлен вручную до актуальной версии, не может быть правильно перенастроен... Кому нужен этот цирк с конями... Уж лучше навернуть вскод, ткнуть туда пару плагинов и радоваться жизни.

И да, для создания структур данных в жассе лучше подходят параллельные массивы, чем хештаблица. Если только данных не так много, что они начинают выходить за лимит размера массива, но тогда это уже совсем другая проблема...
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.