вот
constant function H2I takes handle h returns integer
   return h
   return 0
endfunction
constant function I2Mb takes integer i returns multiboard
   return i
   return null
endfunction
constant function I2U takes integer i returns unit
   return i
   return null
endfunction
constant function I2Tr takes integer i returns trigger
   return i
   return null
endfunction
constant function I2Tt takes integer i returns texttag
   return i
   return null
endfunction
constant function I2Rc takes integer i returns rect
   return i
   return null
endfunction
constant function I2Tb takes integer i returns trackable
   return i
   return null
endfunction
constant function I2Lt takes integer i returns lightning
   return i
   return null
endfunction
это код из старого ретурн бага. Допустим, хэндл объекта легко получить с помощью GetHandleId. Но вот другой случай, у меня есть номер хэндла GetHandleId(handle), но как его конвертировать в хэндл? Сегодня это не работает? Придется ли с отдельными объектами работать? Просто в старой карте манипулируют с помощью всех этих манипуляции с handle и др.

Принятый ответ

нет, конвертации напрямую нет. я что-то слышал в прошлом про баг с сохранением fogmodifier в хештаблицу, но деталей не знаю, можешь проверить то направление.
ну и мемхак, на крайняк, офк.
0
29
7 лет назад
0
GetHandleId(handle) обратно не вернёшь.
А есть же Get\SetUnitUserData || Set\GetItemUserData, и такая вещь как структура с ними тоже хорошая манипулаяция. Есть такая штука, которой не нужен хеш, ну допустим образно "GetHandleId() - HANDLE_POS_UNIT (0x100000). " и получает индекс массива к которому был закреплён юнит. Но зачем такой изврат? Когда есть хеш таблица, или структура и UserData...
0
27
7 лет назад
Отредактирован MpW
0
KingMaximax, мб и есть хеш таблица, или структура и UserData... Просто я наработку нашел, старую карту. Мультиборд, радар. Жаль не взглянуть никак. Все статьи на хгм про мультиборд почти не о чем.
Так она на новых патчах не работает. Там полностью надо разбираться с кодом и прочее.
Например есть код
function get_object_iparam takes handle h, string keyz returns integer
   return GetStoredInteger(udg_cache, I2S(GetHandleId(h)), keyz)
endfunction

call DestroyLightningBJ(get_object_iparam ( r, "GetLightning[" + I2S(i) + "]"))
он может уничтожать молнию Lightning с помощью DestroyLightningBJ. А сама функция get_object_iparam возвращает число. Сегодня варкрафт пишет, что какая то ошибка (должна быть молния, а не целое число). Извращенный способ. Я абсолютно не понимаю этот старый ретурн баг
Я так понял надо из кэша достать молнию.
1
29
7 лет назад
1
Steal nerves, по сути хендл как бы указатель(дескриптор), UINT32 или UINT64 в зависимости от арх. проц. ВМ. Он хранить адрес памяти вроде на переменную типа, в данном случае на декорацию. Просто молнию удаляли по указателю, потом это метелица исправила. В общем через этот баг удаляло декорацию по адресу, что возможно опасный вызов..
Так что тебе придётся рыться в этом мусоре и перепиливать на лад патча 1.26+, в данном случае можно будет использовать UserData и hashtable; Вот кеш(gamecache) не рекомендую.
Save\Load$type$Handle() Для хендл типов destructable. unit и т.д. (скорее всего ты знаешь)
1
16
7 лет назад
Отредактирован DracoL1ch
1
нет, конвертации напрямую нет. я что-то слышал в прошлом про баг с сохранением fogmodifier в хештаблицу, но деталей не знаю, можешь проверить то направление.
ну и мемхак, на крайняк, офк.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.