Удаление маркера с карты

Heav

Активный
Автор темы
185
71
Версия SA-MP
  1. Любая
Привет. Я не знаю как можно удалить маркер с карты через removeBlip когда я создаю еще один также с помощью addBlipForCoord, ведь у меня нет хендла созданного маркера. Ещё хочу изменять цвет маркера, что тоже связано с его хендлом.
Lua:
if result then -- Если диалог открыт
            if button == 1 then -- Нажатие кнопки выбора
                if list == 0 then
                    addBlipForCoord(-420.43182373047, 2216.1770019531, 42.4296875)
                elseif list == 1 then
                    addBlipForCoord(-1261.7995605469, -2205.6979980469, 27.230716705322)
                elseif list == 2 then
                    addBlipForCoord(-772.44604492188, -19.810245513916, 48.791007995605)
                elseif list == 3 then
                    addBlipForCoord(-1653.6353759766, -2231.5227050781, 30.227577209473)
                elseif list == 4 then
                    addBlipForCoord(-1920.2502441406, 712.64581298828, 46.5625)
                elseif list == 5 then
                    addBlipForCoord(2102.3334960938, -103.70011901855, 2.3198180198669)
                elseif list == 6 then
                    addBlipForCoord(-45.400295257568, -1599.970703125, 3.2256937026978)
                elseif list == 7 then
                    addBlipForCoord(1078.9154052734, 1040.7192382813, 10.156206130981)
                elseif list == 8 then
                    addBlipForCoord(-1316.9866943359, 2519.2641601563, 87.266662597656)
                elseif list == 9 then
                    addBlipForCoord(-1507.2589111328, 1963.7183837891, 48.421875)
                elseif list == 10 then
                    addBlipForCoord(-12.04994392395, 2499.3422851563, 16.484375)
                elseif list == 11 then
                    addBlipForCoord(1264.6301269531, 292.60809326172, 19.5546875)
                elseif list == 12 then
                    addBlipForCoord(-454.30856323242, 1445.0700683594, 20.966617584229)
                elseif list == 13 then
                    addBlipForCoord(-720.02746582031, -2108.4484863281, 23.720149993896)
                end
            end
        end
    end
end
 
Решение
Lua:
-- начало кода
local blipHandle, blips = nil, {
    { -420.43182373047, 2216.1770019531, 42.4296875 },
    { -1261.7995605469, -2205.6979980469, 27.230716705322 },
    { -772.44604492188, -19.810245513916, 48.791007995605 },
    { -1653.6353759766, -2231.5227050781, 30.227577209473 },
    { -1920.2502441406, 712.64581298828, 46.5625 },
    { 2102.3334960938, -103.70011901855, 2.3198180198669 },
    { -45.400295257568, -1599.970703125, 3.2256937026978 },
    { 1078.9154052734, 1040.7192382813, 10.156206130981 },
    { -1316.9866943359, 2519.2641601563, 87.266662597656 },
    { -1507.2589111328, 1963.7183837891, 48.421875 },
    { -12.04994392395, 2499.3422851563, 16.484375 },
    { 1264.6301269531, 292.60809326172, 19.5546875 }...

Andrinall

Известный
702
527
Привет. Я не знаю как можно удалить маркер с карты через removeBlip когда я создаю еще один также с помощью addBlipForCoord, ведь у меня нет хендла созданного маркера. Ещё хочу изменять цвет маркера, что тоже связано с его хендлом.
Lua:
if result then -- Если диалог открыт
            if button == 1 then -- Нажатие кнопки выбора
                if list == 0 then
                    addBlipForCoord(-420.43182373047, 2216.1770019531, 42.4296875)
                elseif list == 1 then
                    addBlipForCoord(-1261.7995605469, -2205.6979980469, 27.230716705322)
                elseif list == 2 then
                    addBlipForCoord(-772.44604492188, -19.810245513916, 48.791007995605)
                elseif list == 3 then
                    addBlipForCoord(-1653.6353759766, -2231.5227050781, 30.227577209473)
                elseif list == 4 then
                    addBlipForCoord(-1920.2502441406, 712.64581298828, 46.5625)
                elseif list == 5 then
                    addBlipForCoord(2102.3334960938, -103.70011901855, 2.3198180198669)
                elseif list == 6 then
                    addBlipForCoord(-45.400295257568, -1599.970703125, 3.2256937026978)
                elseif list == 7 then
                    addBlipForCoord(1078.9154052734, 1040.7192382813, 10.156206130981)
                elseif list == 8 then
                    addBlipForCoord(-1316.9866943359, 2519.2641601563, 87.266662597656)
                elseif list == 9 then
                    addBlipForCoord(-1507.2589111328, 1963.7183837891, 48.421875)
                elseif list == 10 then
                    addBlipForCoord(-12.04994392395, 2499.3422851563, 16.484375)
                elseif list == 11 then
                    addBlipForCoord(1264.6301269531, 292.60809326172, 19.5546875)
                elseif list == 12 then
                    addBlipForCoord(-454.30856323242, 1445.0700683594, 20.966617584229)
                elseif list == 13 then
                    addBlipForCoord(-720.02746582031, -2108.4484863281, 23.720149993896)
                end
            end
        end
    end
end
addBlipForCoord как раз возвращает хендл.
Просто запиши его в переменную куда-то или в таблицу, в зависимости от кол-ва блипов созданных одновременно.
Типо blipHandle = addBlipForCoord(...)
 
  • Нравится
Реакции: Heav

chapo

tg/inst: @moujeek
Всефорумный модератор
9,226
12,626
Lua:
-- начало кода
local blipHandle, blips = nil, {
    { -420.43182373047, 2216.1770019531, 42.4296875 },
    { -1261.7995605469, -2205.6979980469, 27.230716705322 },
    { -772.44604492188, -19.810245513916, 48.791007995605 },
    { -1653.6353759766, -2231.5227050781, 30.227577209473 },
    { -1920.2502441406, 712.64581298828, 46.5625 },
    { 2102.3334960938, -103.70011901855, 2.3198180198669 },
    { -45.400295257568, -1599.970703125, 3.2256937026978 },
    { 1078.9154052734, 1040.7192382813, 10.156206130981 },
    { -1316.9866943359, 2519.2641601563, 87.266662597656 },
    { -1507.2589111328, 1963.7183837891, 48.421875 },
    { -12.04994392395, 2499.3422851563, 16.484375 },
    { 1264.6301269531, 292.60809326172, 19.5546875 },
    { -454.30856323242, 1445.0700683594, 20.966617584229 },
    { -720.02746582031, -2108.4484863281, 23.720149993896 }
}
-- твоя проверка
if result then
    if button == 1 and blips[list + 1] then
        blipHandle = addBlipForCoord(table.unpack(blips[list + 1]))
    end
end

-- удалить блип
removeBlip(blipHandle)
 
  • Нравится
Реакции: Heav и Andrinall

Heav

Активный
Автор темы
185
71
Lua:
-- начало кода
local blipHandle, blips = nil, {
    { -420.43182373047, 2216.1770019531, 42.4296875 },
    { -1261.7995605469, -2205.6979980469, 27.230716705322 },
    { -772.44604492188, -19.810245513916, 48.791007995605 },
    { -1653.6353759766, -2231.5227050781, 30.227577209473 },
    { -1920.2502441406, 712.64581298828, 46.5625 },
    { 2102.3334960938, -103.70011901855, 2.3198180198669 },
    { -45.400295257568, -1599.970703125, 3.2256937026978 },
    { 1078.9154052734, 1040.7192382813, 10.156206130981 },
    { -1316.9866943359, 2519.2641601563, 87.266662597656 },
    { -1507.2589111328, 1963.7183837891, 48.421875 },
    { -12.04994392395, 2499.3422851563, 16.484375 },
    { 1264.6301269531, 292.60809326172, 19.5546875 },
    { -454.30856323242, 1445.0700683594, 20.966617584229 },
    { -720.02746582031, -2108.4484863281, 23.720149993896 }
}
-- твоя проверка
if result then
    if button == 1 and blips[list + 1] then
        blipHandle = addBlipForCoord(table.unpack(blips[list + 1]))
    end
end

-- удалить блип
removeBlip(blipHandle)
Спасибо! Можешь пожалуйста еще помочь, потому что он теперь похоже удаляет блипы как только они создаются.

Lua:
require 'lib.moonloader'

local dialogTabArr = {
'Placeholder01\t1',
'Placeholder02\t2',
'Placeholder03\t3',
'Placeholder04\t4',
'Placeholder05\t5',
'Placeholder06\t6',
'Placeholder07\t7',
'Placeholder08\t8',
'Placeholder09\t9',
'Placeholder010\t10',
'Placeholder011\t11',
'Placeholder012\t12',
'Placeholder013\t13',
'Placeholder014\t14',
'Placeholder015\t15'
}

-- таблица
local blipHandle, blips = nil, {
    { -420.43182373047, 2216.1770019531, 42.4296875 },
    { -1261.7995605469, -2205.6979980469, 27.230716705322 },
    { -772.44604492188, -19.810245513916, 48.791007995605 },
    { -1653.6353759766, -2231.5227050781, 30.227577209473 },
    { -1920.2502441406, 712.64581298828, 46.5625 },
    { 2102.3334960938, -103.70011901855, 2.3198180198669 },
    { -45.400295257568, -1599.970703125, 3.2256937026978 },
    { 1078.9154052734, 1040.7192382813, 10.156206130981 },
    { -1316.9866943359, 2519.2641601563, 87.266662597656 },
    { -1507.2589111328, 1963.7183837891, 48.421875 },
    { -12.04994392395, 2499.3422851563, 16.484375 },
    { 1264.6301269531, 292.60809326172, 19.5546875 },
    { -454.30856323242, 1445.0700683594, 20.966617584229 },
    { -720.02746582031, -2108.4484863281, 23.720149993896 }
}

local dialogTabStr = ''

for _, str in ipairs(dialogTabArr) do
    dialogTabStr = dialogTabStr .. str .. '\n'
end

local dialogTabHeaderStr = 'Название\tВремя\n' .. dialogTabStr

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    sampRegisterChatCommand('test', cmd_test)

    while true do
        wait(0)

        local result, button, list, input = sampHasDialogRespond(15)

        -- проверка
        if result then
            if button == 1 and blips[list + 1] then
                blipHandle = addBlipForCoord(table.unpack(blips[list + 1]))
            end
        end
        -- удаление блипа
        removeBlip(blipHandle)
    end
end

function cmd_test(arg)
    if #arg == 0 then
        sampShowDialog(15, 'Placeholder0', dialogTabHeaderStr, 'Выбрать', 'Закрыть', 5)
    end
end
 

chapo

tg/inst: @moujeek
Всефорумный модератор
9,226
12,626
Спасибо! Можешь пожалуйста еще помочь, потому что он теперь похоже удаляет блипы как только они создаются.

Lua:
require 'lib.moonloader'

local dialogTabArr = {
'Placeholder01\t1',
'Placeholder02\t2',
'Placeholder03\t3',
'Placeholder04\t4',
'Placeholder05\t5',
'Placeholder06\t6',
'Placeholder07\t7',
'Placeholder08\t8',
'Placeholder09\t9',
'Placeholder010\t10',
'Placeholder011\t11',
'Placeholder012\t12',
'Placeholder013\t13',
'Placeholder014\t14',
'Placeholder015\t15'
}

-- таблица
local blipHandle, blips = nil, {
    { -420.43182373047, 2216.1770019531, 42.4296875 },
    { -1261.7995605469, -2205.6979980469, 27.230716705322 },
    { -772.44604492188, -19.810245513916, 48.791007995605 },
    { -1653.6353759766, -2231.5227050781, 30.227577209473 },
    { -1920.2502441406, 712.64581298828, 46.5625 },
    { 2102.3334960938, -103.70011901855, 2.3198180198669 },
    { -45.400295257568, -1599.970703125, 3.2256937026978 },
    { 1078.9154052734, 1040.7192382813, 10.156206130981 },
    { -1316.9866943359, 2519.2641601563, 87.266662597656 },
    { -1507.2589111328, 1963.7183837891, 48.421875 },
    { -12.04994392395, 2499.3422851563, 16.484375 },
    { 1264.6301269531, 292.60809326172, 19.5546875 },
    { -454.30856323242, 1445.0700683594, 20.966617584229 },
    { -720.02746582031, -2108.4484863281, 23.720149993896 }
}

local dialogTabStr = ''

for _, str in ipairs(dialogTabArr) do
    dialogTabStr = dialogTabStr .. str .. '\n'
end

local dialogTabHeaderStr = 'Название\tВремя\n' .. dialogTabStr

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    sampRegisterChatCommand('test', cmd_test)

    while true do
        wait(0)

        local result, button, list, input = sampHasDialogRespond(15)

        -- проверка
        if result then
            if button == 1 and blips[list + 1] then
                blipHandle = addBlipForCoord(table.unpack(blips[list + 1]))
            end
        end
        -- удаление блипа
        removeBlip(blipHandle)
    end
end

function cmd_test(arg)
    if #arg == 0 then
        sampShowDialog(15, 'Placeholder0', dialogTabHeaderStr, 'Выбрать', 'Закрыть', 5)
    end
end
я дал пример кода, это надо поместить туда где тебе нужно удалять блип
1688144354846.png
 
  • Нравится
Реакции: Heav

Heav

Активный
Автор темы
185
71
я дал пример кода, это надо поместить туда где тебе нужно удалять блип
Посмотреть вложение 206350
Теперь все работает как следует, еще раз спасибо. Я все еще учусь писать скрипты, поэтому не всегда получается правильно, ты не знаешь как можно добавить в одну переменную из таблицы ещё несколько координат к существующим чтобы они создавали сразу несколько блипов при выборе одной из опций в диалоге?
Lua:
-- таблица
local blipHandle, blips = nil, {
    { -420.43182373047, 2216.1770019531, 42.4296875 },
    { -1261.7995605469, -2205.6979980469, 27.230716705322 },
    { -772.44604492188, -19.810245513916, 48.791007995605 [[-- + X, Y, Z, + X, Y, Z--]]},
    { -1653.6353759766, -2231.5227050781, 30.227577209473 },
    { -1920.2502441406, 712.64581298828, 46.5625 },
    { 2102.3334960938, -103.70011901855, 2.3198180198669 },
    { -45.400295257568, -1599.970703125, 3.2256937026978 },
    { 1078.9154052734, 1040.7192382813, 10.156206130981 },
    { -1316.9866943359, 2519.2641601563, 87.266662597656 },
    { -1507.2589111328, 1963.7183837891, 48.421875 },
    { -12.04994392395, 2499.3422851563, 16.484375 },
    { 1264.6301269531, 292.60809326172, 19.5546875 },
    { -454.30856323242, 1445.0700683594, 20.966617584229 },
    { -720.02746582031, -2108.4484863281, 23.720149993896 }
}
 
Последнее редактирование:

chapo

tg/inst: @moujeek
Всефорумный модератор
9,226
12,626
Теперь все работает как следует, еще раз спасибо. Я все еще учусь писать скрипты, поэтому не всегда получается правильно, ты не знаешь как можно добавить в одну переменную из таблицы ещё несколько координат к существующим чтобы они создавали сразу несколько блипов при выборе одной из опций в диалоге?
Lua:
-- таблица
local blipHandle, blips = nil, {
    { -420.43182373047, 2216.1770019531, 42.4296875 },
    { -1261.7995605469, -2205.6979980469, 27.230716705322 },
    { -772.44604492188, -19.810245513916, 48.791007995605 [[-- + X, Y, Z, + X, Y, Z--]]},
    { -1653.6353759766, -2231.5227050781, 30.227577209473 },
    { -1920.2502441406, 712.64581298828, 46.5625 },
    { 2102.3334960938, -103.70011901855, 2.3198180198669 },
    { -45.400295257568, -1599.970703125, 3.2256937026978 },
    { 1078.9154052734, 1040.7192382813, 10.156206130981 },
    { -1316.9866943359, 2519.2641601563, 87.266662597656 },
    { -1507.2589111328, 1963.7183837891, 48.421875 },
    { -12.04994392395, 2499.3422851563, 16.484375 },
    { 1264.6301269531, 292.60809326172, 19.5546875 },
    { -454.30856323242, 1445.0700683594, 20.966617584229 },
    { -720.02746582031, -2108.4484863281, 23.720149993896 }
}
ну я бы сделал это примерно так
Lua:
local blipsHandles = {}
local blips = {
    {
        name = 'Метка 1',
        points = {
            { 0, 0, 0 },
            { 1, 1, 0 },
        }
    },
    {
        name = 'Метка 2',
        points = {
            { 22, 37, 0 },
            { 91, 75, 0 },
        }
    }
}

local function removeBlips()
    for index, handle in ipairs(blipsHandles) do
        if doesBlipExist(handle) then
            removeBlip(handle)
            table.remove(blipsHandles, index)
        end
    end
end

-- текст диалога (указывать в sampShowDialog)
local text = (function()
    local pointsNames = { 'Удалить все метки' }
    for _, blipData in pairs(blips) do
        table.insert(pointsNames, blipData.name)
    end
    return table.concat(pointsNames, '\n')
end)()

sampShowDialog(123, 'Blips', text, 'Ok', 'Close', 4)

-- обработка ответа диалога
if button == 1 then
    removeBlips()
    if blips[line] then
        for _, pointPos in ipairs(blips[line].points) do
            table.insert(blipsHandles, addBlipForCoord(table.unpack(pointPos)))
        end
    end
end