3д текст

samperkrytoi228

Новичок
Автор темы
19
2
Версия SA-MP
  1. Любая
Помогите пожалуйста,почему мой скрипт реагирует на весь 3Д текст, где есть надпись "Используйте 'Действие'".Помогите решить данную проблему. Код ниже
 
Решение
Lua:
texts = {
    'Бюро Аэронавигационной Информации',
    'Выход к самолету'
}

function main()
    repeat wait(0) until isSampAvailable()
    while true do wait(0)
        local posX, posY, posZ = getCharCoordinates(PLAYER_PED)
        local res, text, color, x, y, z, distance, ignoreWalls, player, vehicle = Search3Dtext(posX, posY, posZ, 1.5, "") -- 1.5 Radius
        for i, atext in ipairs(texts) do
            if text:find(atext) then
                setGameKeyState(21, 255)
                wait(50)
                setGameKeyState(21, 0)
                wait(2000)
            end
        end
    end
end

function Search3Dtext(x, y, z, radius, patern)
    local text = ""
    local color = 0
    local posX = 0.0
    local posY = 0.0...

arc warden

Участник
138
21
Помогите пожалуйста,почему мой скрипт реагирует на весь 3Д текст, где есть надпись "Используйте 'Действие'".

local vk = require 'vkeys'

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

local altPressed = false

while true do
wait(0)
for id = 0, 2048 do
local result = sampIs3dTextDefined(id)
if result then
local text, color, posX, posY, posZ, distance, ignoreWalls, playerId, vehicleId = sampGet3dTextInfoById(id)
local xf, yf, zf = getCharCoordinates(PLAYER_PED)
local dist = getDistanceBetweenCoords3d(xf, yf, zf, posX, posY, posZ)
if string.find(text, 'Бюро Аэронавигационной Информации') or string.find(text, '[ Выход к самолету ]') then
if dist <= 0.5 then -- если дистанция от 3D-текста до игрока будет меньше 1 метра
if not altPressed then
setVirtualKeyDown(vk.VK_MENU, true
wait(100)
setVirtualKeyDown(vk.VK_MENU, false)
altPressed = true
wait(8000)
end
else
altPressed = false
end
end
end
end
end
end

помогите решить данную проблему
я тя молю сделай это в виде кода у меня глаза щас вылетят
 

samperkrytoi228

Новичок
Автор темы
19
2
Код:
local vk = require 'vkeys'

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

    local altPressed = false -- Добавляем переменную для отслеживания состояния клавиши Alt

    while true do
        wait(0)
        for id = 0, 2048 do
            local result = sampIs3dTextDefined(id)
            if result then
                local text, color, posX, posY, posZ, distance, ignoreWalls, playerId, vehicleId = sampGet3dTextInfoById(id)
                local xf, yf, zf = getCharCoordinates(PLAYER_PED)
                local dist = getDistanceBetweenCoords3d(xf, yf, zf, posX, posY, posZ)
                if string.find(text, 'Бюро Аэронавигационной Информации') or string.find(text, '[ Выход к самолету ]') then -- текст, который будет искать
                    if dist <= 0.5 then -- если дистанция от 3D-текста до игрока будет меньше 1 метра
                        if not altPressed then
                            setVirtualKeyDown(vk.VK_MENU, true) -- нажимаем клавишу Alt
                            wait(100) -- ждем 100 миллисекунд (0.1 секунды)
                            setVirtualKeyDown(vk.VK_MENU, false) -- отпускаем клавишу Alt
                            altPressed = true
                            wait(8000)
                        end
                    else
                        altPressed = false
                    end
                end
            end
        end
    end
end
 

Heav

Активный
185
71
Код:
local vk = require 'vkeys'

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

    local altPressed = false -- Добавляем переменную для отслеживания состояния клавиши Alt

    while true do
        wait(0)
        for id = 0, 2048 do
            local result = sampIs3dTextDefined(id)
            if result then
                local text, color, posX, posY, posZ, distance, ignoreWalls, playerId, vehicleId = sampGet3dTextInfoById(id)
                local xf, yf, zf = getCharCoordinates(PLAYER_PED)
                local dist = getDistanceBetweenCoords3d(xf, yf, zf, posX, posY, posZ)
                if string.find(text, 'Бюро Аэронавигационной Информации') or string.find(text, '[ Выход к самолету ]') then -- текст, который будет искать
                    if dist <= 0.5 then -- если дистанция от 3D-текста до игрока будет меньше 1 метра
                        if not altPressed then
                            setVirtualKeyDown(vk.VK_MENU, true) -- нажимаем клавишу Alt
                            wait(100) -- ждем 100 миллисекунд (0.1 секунды)
                            setVirtualKeyDown(vk.VK_MENU, false) -- отпускаем клавишу Alt
                            altPressed = true
                            wait(8000)
                        end
                    else
                        altPressed = false
                    end
                end
            end
        end
    end
end
Можешь объяснить что твой скрипт должен делать? И ты его сам писал так?
 

samperkrytoi228

Новичок
Автор темы
19
2
Можешь объяснить что твой скрипт должен делать? И ты его сам писал так?
1. По факту он должен при виде маркера "Бюро Аэронавигационной Информации" или "[ Выход к самолету ]" в радиусе 0.5 метров нажимать на ALT раз в 8 секунд. Но мой скрипт нажимает на ВСЕ маркеры, в которых есть строчка "Используйте: 'Действие'". В моих маркерах "бюро" и "выход", эта строка тоже присутствует.
2. Я писал до этого на форуме,мне челик помог,но чет не особо работал скрипт. Мне chatgpt его подкорректировал и вроде бы норм работает

он должен реагировать на 3д текст с надписями типа бюро перелетов(это просто). А реагирует еще на любые 3д тексты ИМЕННО С ТЕКСТОМ ИСПОЛЬЗУЙТЕ [ДЕЙСТВИЕ]?
да, но в 3д тексте бюро тоже есть используйте действие
 

Heav

Активный
185
71
Lua:
texts = {
    'Бюро Аэронавигационной Информации',
    'Выход к самолету'
}

function main()
    repeat wait(0) until isSampAvailable()
    while true do wait(0)
        local posX, posY, posZ = getCharCoordinates(PLAYER_PED)
        local res, text, color, x, y, z, distance, ignoreWalls, player, vehicle = Search3Dtext(posX, posY, posZ, 1.5, "") -- 1.5 Radius
        for i, atext in ipairs(texts) do
            if text:find(atext) then
                setGameKeyState(21, 255)
                wait(50)
                setGameKeyState(21, 0)
                wait(2000)
            end
        end
    end
end

function Search3Dtext(x, y, z, radius, patern)
    local text = ""
    local color = 0
    local posX = 0.0
    local posY = 0.0
    local posZ = 0.0
    local distance = 0.0
    local ignoreWalls = false
    local player = -1
    local vehicle = -1
    local result = false

    for id = 0, 2048 do
        if sampIs3dTextDefined(id) then
            local text2, color2, posX2, posY2, posZ2, distance2, ignoreWalls2, player2, vehicle2 = sampGet3dTextInfoById(id)
            if getDistanceBetweenCoords3d(x, y, z, posX2, posY2, posZ2) < radius then
                if string.len(patern) ~= 0 then
                    if string.match(text2, patern, 0) ~= nil then result = true end
                else
                    result = true
                end
                if result then
                    text = text2
                    color = color2
                    posX = posX2
                    posY = posY2
                    posZ = posZ2
                    distance = getDistanceBetweenCoords3d(posX2, posY2,posZ2, x,y,z)
                    ignoreWalls = ignoreWalls2
                    player = player2
                    vehicle = vehicle2
                    radius = getDistanceBetweenCoords3d(x, y, z, posX, posY, posZ)
                end
            end
        end
    end

    return result, text, color, posX, posY, posZ, distance, ignoreWalls, player, vehicle
end
 

Вложения

  • pilot.lua
    2 KB · Просмотры: 4
  • Нравится
Реакции: samperkrytoi228