маркер над игроком

$Mr.R1ch$

Активный
Автор темы
288
41
Версия MoonLoader
Другое
Как сделать проверку на то, есть ли маркер над головой выбранного игрока или нет? Пытаюсь сделать так, если я ставлю один маркер над игроком, и позже хочу поставить второй, то маркер с первого убирается, то есть сделать выбор игроков.

up
 
Последнее редактирование:

$Mr.R1ch$

Активный
Автор темы
288
41
Ну что мешает сохранять хендл маркера и удалять старый по нему? Сохранять в файл, чтобы даже перезагрузка скрипта не мешала или удалять при его выгрузке.
А зачем его сохранять вообще? Эта функция просто работает как временный селектор в игре, ничего сохранять не нужно вообще

up
 
Последнее редактирование:
  • Bug
Реакции: Tema05 и wojciech?

wojciech?

Известный
Проверенный
355
237
А зачем его сохранять вообще? Эта функция просто работает как временный селектор в игре, ничего сохранять не нужно вообще
Тебе нужно сохранить хендл маркера в переменную при создании. Если она уже проинициализирована, то выгружаешь сначала старый и потом создаешь новый. При выгрузке скрипта (onScriptTerminate) в любом случае ты должен выгрузить созданный маркер, чтобы он не остался до перезахода в игру
 

$Mr.R1ch$

Активный
Автор темы
288
41
Тебе нужно сохранить хендл маркера в переменную при создании. Если она уже проинициализирована, то выгружаешь сначала старый и потом создаешь новый. При выгрузке скрипта (onScriptTerminate) в любом случае ты должен выгрузить созданный маркер, чтобы он не остался до перезахода в игру
Я создал хендел и записал в переменную маркера, теперь как сделать так, чтобы маркер удалялся с предыдущего игрока и ставился на следующего? у меня не получилось и я не понял
 

kyrtion

Известный
983
355
Нужно запомнить маркер хендл. Если хочешь чтобы поменять местами маркер другого игрока - нужно удалить хендл маркера и создать новый маркер, и опять запомнить хендл маркера и постоянно устанавливать позиция игрока (цикл с потоком). При завершении работы скрипта тоже необходимо удалить хендл маркера ибо там останется нерабочий летучий маркер

взято примеры из кликвара:
Lua:
local pointMarker = nil

local function createPointMarker(x, y, z)
  pointMarker = createUser3dMarker(x, y, z + 0.3, 4)
end

local function removePointMarker()
  if pointMarker then
    removeUser3dMarker(pointMarker)
    pointMarker = nil
  end
end

function onScriptTerminate(script, quitGame)
  if script == thisScript() and pointMarker then
    removeUser3dMarker(pointMarker)
  end
end

-- пример, используется только 1 маркер и не более
-- создать: createPointMarker(x, y, z)
-- удалить: removePointMarker()
--[[
  funcs moonloader markers:
  v.015 setAlwaysDraw3dMarkers(bool set)
  v.015 Marker marker = createUser3dMarker(float atX, float atY, float atZ, int color)
  v.015 removeUser3dMarker(Marker marker)
]]
 
Последнее редактирование:

$Mr.R1ch$

Активный
Автор темы
288
41
Нужно запомнить маркер хендл. Если хочешь чтобы поменять местами маркер другого игрока - нужно удалить хендл маркера и создать новый маркер, и опять запомнить хендл маркера и постоянно устанавливать позиция игрока (цикл с потоком). При завершении работы скрипта тоже необходимо удалить хендл маркера ибо там останется нерабочий летучий маркер

взято примеры из кликвара:
Lua:
local pointMarker = nil

local function createPointMarker(x, y, z)
  pointMarker = createUser3dMarker(x, y, z + 0.3, 4)
end

local function removePointMarker()
  if pointMarker then
    removeUser3dMarker(pointMarker)
    pointMarker = nil
  end
end

function onScriptTerminate(script, quitGame)
  if script == thisScript() and pointMarker then
    removeUser3dMarker(pointMarker)
  end
end

-- пример, используется только 1 маркер и не более
-- создать: createPointMarker(x, y, z)
-- удалить: removePointMarker()
--[[
  funcs moonloader markers:
  v.015 setAlwaysDraw3dMarkers(bool set)
  v.015 Marker marker = createUser3dMarker(float atX, float atY, float atZ, int color)
  v.015 removeUser3dMarker(Marker marker)
]]
попытался сделать, и ничего не вышло, маркер не ставится вообще, а я понятия не имею в чем проблема

Lua:
local marker = nil

function main()
    while not isSampAvailable() do wait (100) end

    sampRegisterChatCommand("setmarker", market)

    wait(-1)
end


  function onScriptTerminate(script, quitGame)
  if script == thisScript() and marker then
    removeBlip(marker)
  end
end


function market(ped)
   local res, id = sampGetPlayerIdByCharHandle(ped)
   if res then
      if marker then
         removeBlip(marker)
      end
         marker = addBlipForChar(ped)
   end
end
 

$Mr.R1ch$

Активный
Автор темы
288
41
addBlipForChar и createUser3dMarker кажись отличаются.
еще не посмотрел, либо таргет маркер либо стрелочка которая перемещается сверху и снизу.
позже разузнаю
стрелка эта, перемещается сверху и снизу

@kyrtion
 
Последнее редактирование: