Если коротко: есть скилл "паразит", но когда паразит появляется, призывающий юнит не тот, кто его закастовал, а тот, из кого он появился. Мне же в дальнейшем нужно это дело отслеживать.
Во время каста записываю по id цели кастера под индексом 7. Последние строчки с дебагом выдают, что все норм, это один и тот же юнит:
unit caster = GetTriggerUnit();
unit target = GetSpellTargetUnit();
SaveUnitHandle(hash,GetHandleId(target),7,caster);
BJDebugMsg(GetUnitName(caster));
BJDebugMsg(GetUnitName(LoadUnitHandle(hash,GetHandleId(target),7)));
Но когда я загружаю юнита из хештаблицы позже, дебаг выдает null.
unit u = GetSummoningUnit();
unit summon = GetSummonedUnit();
if (IsUnitEnemy(u,GetOwningPlayer(summon))) {
        unit caster = LoadUnitHandle(hash,GetUnitTypeId(u),7);
        SaveUnitHandle(hash,GetUnitTypeId(summon),0,caster);
        BJDebugMsg(GetUnitName(caster));
        caster=null;
} 
И самое странное, что раньше я наблюдал такой же баг, когда мне надо было сохранить строки, а не юнитов, но все же. Мне кажется, дело в произвольном индексе, но мне так надо.

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

SaveUnitHandle(hash,GetHandleId(target),7,caster);
GetHandleId(target) - хендл самого юнита
LoadUnitHandle(hash,GetUnitTypeId(u),7);
GetUnitTypeId(u) - Ид типа юнита, а не хендл.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.