Мне нужен такой 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.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
29
4 года назад
0
Используйте структруры или lua.
Принятый ответ
0
17
4 года назад
Отредактирован Vlod
0
Нужен набор ссылок handle, или набор уникальных ID (integer-ов)?
Какой язык, jass/.../lua?
0
26
4 года назад
0
зачем?
0
32
4 года назад
0
Ну agent, это такой универсальный тип для сохранения в хештаблицу. Хендлы - указатели, места сами по себе они занимают одниакого, ибо тупо целые числа, а вот сами обьекты занимают память исходя из своей структуры. Таймер с локейшином самые легкие хенлдлы, герои самые тяжелые.
Так же можно почитать про Fogstate exploit - первая ссылка в поиске тык
0
9
4 года назад
Отредактирован Koladik
0
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++
1
17
4 года назад
1
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 станет больше, чем максимальная длинна массива в данной версии.
0
29
4 года назад
Отредактирован nazarpunk
0
На счет луа, наверное, это лучший вариант но пока нормальную официальную поддержку не завезли
Как это не завезли? И как это люди умудряются писать без официальной поддержки?
0
9
4 года назад
0
NazarPunk, да я не про то. Конечно, можно поставить себе vs code несколько неофициальных утилит и жить почти в шоколаде? О чем говорить , если в чистом варике без JNGP никогда не было подсветки синтаксиса в jass. Но все это неофициальные утилиты.
2
29
4 года назад
Отредактирован nazarpunk
2
О чем говорить , если в чистом варике без JNGP никогда не было подсветки синтаксиса в jass
И вы думаете что-то изменится?
Можно вообще самому написать себе сборщик и не мучаться)
0
9
4 года назад
0
Vlod, я попробовал, спасибо, это решает мою проблему, если нельзя резервировать handleID без создания тяжелого объекта, спасибо за хороший вариант, однако не решает ее в глобальном смысле. Потому, что для этой нумерации придется отдельную хэштаблицу создавать.
NazarPunk:
И вы думаете что-то изменится?
Ну я думаю, что да jasshelper то они официально добавили раньше и его не было.
2
29
4 года назад
2
Ну я думаю, что да jasshelper то они официально добавили раньше и его не было.
В нём не так много возможностей, как у современной IDE, и врятли близы будут добавлять функционал по работе с кодом.
0
25
4 года назад
Отредактирован Jack-of-shadow
0
Хмм возможно я что то не так понял, но разве key не подходит как пустой хендл?
globals
key MyHandle
endglobals
2
24
4 года назад
Отредактирован prog
2
Ну я думаю, что да jasshelper то они официально добавили раньше и его не было.
Не смешите моего вымышленного кота... Добавленый близами жассхелпер добавлен криво, работает хуже чем в JNGP, не обновляется, требует костылей и пинков под зад для нормальной работы, не может быть обновлен вручную до актуальной версии, не может быть правильно перенастроен... Кому нужен этот цирк с конями... Уж лучше навернуть вскод, ткнуть туда пару плагинов и радоваться жизни.

И да, для создания структур данных в жассе лучше подходят параллельные массивы, чем хештаблица. Если только данных не так много, что они начинают выходить за лимит размера массива, но тогда это уже совсем другая проблема...
0
28
4 года назад
0
Jack-of-shadow, это тип vJass, это просто число, причём довольно маленькое, может пересекаться с индексами игроков.
Я юзаю этот тип, потому что по индексу игрока ничего в хеше не храню.
0
37
4 года назад
Отредактирован ScorpioT1000
0
Нет, ты неправильно это делаешь, хранить надо просто целые числа (или ключи-строки, а сохранять через StringHash())
P.S. С lua всё хорошо
Чтобы оставить комментарий, пожалуйста, войдите на сайт.