Actor.StorePos($PLAYER_ACTOR, 10@, 11@, 12@)
30@ = 10000.0 //Тут храним дальность до ближайшего маркера
31@ = -1 //Тут храним номер блока ближайшего маркера
for 0@ = 0 to 32//Начало цикла
1@ = 0@
1@ *= 160//Находим смещение от начала блоков маркера
1@ += 0xC7DD58 //Прибавляем начало пула маркеров
0A8E: 2@ = 1@ + 48//Находим адрес Х координаты
0A8D: 20@ = read_memory 2@ size 4 virtual_protect 0 //Читаем его
0A8E: 2@ = 1@ + 52
0A8D: 21@ = read_memory 2@ size 4 virtual_protect 0
0A8E: 2@ = 1@ + 56
0A8D: 22@ = read_memory 2@ size 4 virtual_protect 0
0509: 32@ = distance_between_XY 10@ 11@ and_XY 20@ 21@ //Измеряем дольность от игрока до маркера
0A8E: 2@ = 1@ + 84 //Находим SCM хэндл, если он не равен 0, то маркер существует
0A8D: 8@ = read_memory 2@ size 4 virtual_protect 0 //читаем его
if and
32@ < 30@//Если маркер ближе, чем ближайший маркер
8@ <> 0//И если маркер существует
then
30@ = 32@
31@ = 0@ //То этот маркер становится ближайшим
end
if
31@<>-1 //Если найден хотябы один маркер, то читаем его координаты
jf @END
1@ = 31@
1@ *= 160
1@ += 0xC7DD58
0A8E: 2@ = 1@ + 48
0A8D: 20@ = read_memory 2@ size 4 virtual_protect 0
0A8E: 2@ = 1@ + 52
0A8D: 21@ = read_memory 2@ size 4 virtual_protect 0
0A8E: 2@ = 1@ + 56
0A8D: 22@ = read_memory 2@ size 4 virtual_protect 0
В итоге мы получим координаты ближайшего маркера (X=20@, Y=21@, Z=22@).