Вопросы по Lua скриптингу

Общая тема для вопросов по разработке скриптов на языке программирования Lua, в частности под MoonLoader.
  • Задавая вопрос, убедитесь, что его нет в списке частых вопросов и что на него ещё не отвечали (воспользуйтесь поиском).
  • Поищите ответ в теме посвященной разработке Lua скриптов в MoonLoader
  • Отвечая, убедитесь, что ваш ответ корректен.
  • Старайтесь как можно точнее выразить мысль, а если проблема связана с кодом, то обязательно прикрепите его к сообщению, используя блок [code=lua]здесь мог бы быть ваш код[/code].
  • Если вопрос связан с MoonLoader-ом первым делом желательно поискать решение на wiki.

Частые вопросы

Как научиться писать скрипты? С чего начать?
Информация - Гайд - Всё о Lua скриптинге для MoonLoader(https://blast.hk/threads/22707/)
Как вывести текст на русском? Вместо русского текста у меня какие-то каракули.
Изменить кодировку файла скрипта на Windows-1251. В Atom: комбинация клавиш Ctrl+Shift+U, в Notepad++: меню Кодировки -> Кодировки -> Кириллица -> Windows-1251.
Как получить транспорт, в котором сидит игрок?
Lua:
local veh = storeCarCharIsInNoSave(PLAYER_PED)
Как получить свой id или id другого игрока?
Lua:
local _, id = sampGetPlayerIdByCharHandle(PLAYER_PED) -- получить свой ид
local _, id = sampGetPlayerIdByCharHandle(ped) -- получить ид другого игрока. ped - это хендл персонажа
Как проверить, что строка содержит какой-то текст?
Lua:
if string.find(str, 'текст', 1, true) then
-- строка str содержит "текст"
end
Как эмулировать нажатие игровой клавиши?
Lua:
local game_keys = require 'game.keys' -- где-нибудь в начале скрипта вне функции main

setGameKeyState(game_keys.player.FIREWEAPON, -1) -- будет сэмулировано нажатие клавиши атаки
Все иды клавиш находятся в файле moonloader/lib/game/keys.lua.
Подробнее о функции setGameKeyState здесь: lua - setgamekeystate | BlastHack — DEV_WIKI(https://www.blast.hk/wiki/lua:setgamekeystate)
Как получить id другого игрока, в которого целюсь я?
Lua:
local valid, ped = getCharPlayerIsTargeting(PLAYER_HANDLE) -- получить хендл персонажа, в которого целится игрок
if valid and doesCharExist(ped) then -- если цель есть и персонаж существует
  local result, id = sampGetPlayerIdByCharHandle(ped) -- получить samp-ид игрока по хендлу персонажа
  if result then -- проверить, прошло ли получение ида успешно
    -- здесь любые действия с полученным идом игрока
  end
end
Как зарегистрировать команду чата SAMP?
Lua:
-- До бесконечного цикла/задержки
sampRegisterChatCommand("mycommand", function (param)
     -- param будет содержать весь текст введенный после команды, чтобы разделить его на аргументы используйте string.match()
    sampAddChatMessage("MyCMD", -1)
end)
Крашит игру при вызове sampSendChat. Как это исправить?
Это происходит из-за бага в SAMPFUNCS, когда производится попытка отправки пакета определенными функциями изнутри события исходящих RPC и пакетов. Исправления для этого бага нет, но есть способ не провоцировать его. Вызов sampSendChat изнутри обработчика исходящих RPC/пакетов нужно обернуть в скриптовый поток с нулевой задержкой:
Lua:
function onSendRpc(id)
  -- крашит:
  -- sampSendChat('Send RPC: ' .. id)

  -- норм:
  lua_thread.create(function()
    wait(0)
    sampSendChat('Send RPC: ' .. id)
  end)
end
 
Последнее редактирование:

Мира

Участник
455
9
По моему так:
local proverka = true
repeat
    wait(0)
    code..
until proverka == false
автошар. вскоре проверю
Lua:
if sampTextdrawIsExists(2065) then
        text = sampTextdrawGetString(2065)
        if text:match("~w~PRESSED %[ ~b~H~w~ %]") then
            lua_thread.create(function()
                setGameKeyState(9, 255)
                wait(100)
                setGameKeyState(9, 0)
                wait(100)
            end)
        elseif text:match("~w~PRESSED %[ ~b~LALT~w~ %]") then
            lua_thread.create(function()
                setGameKeyState(21, 255)
                wait(100)
                setGameKeyState(21, 0)
                wait(100)
            end)
        elseif text:match("~w~PRESSED %[ ~b~SPACE~w~ %]") then
            lua_thread.create(function()
                setGameKeyState(16, 255)
                wait(100)
                setGameKeyState(16, 0)
                wait(100)
            end)
        end
    end
 

YourAssistant

Участник
144
17
Lua:
local imgui = require 'imgui'
local pie = require 'imgui_piemenu'
local key = require 'vkeys'
local piemenu = imgui.ImBool(false)

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end;
    while not isSampAvailable() do wait(100) end;
    while true do
        wait(0)
        imgui.Process = piemenu.v
        if wasKeyPressed(key.VK_K) then
            piemenu.v = not piemenu.v
        end
    end
end

function imgui.OnDrawFrame()
    if piemenu.v then
        imgui.ShowCursor = true
        imgui.OpenPopup('PieMenu')
        if pie.BeginPiePopup('PieMenu', 1) then
        if pie.PieMenuItem('Test1') then end
        if pie.PieMenuItem('Test2') then end
        --if pie.PieMenuItem('Test5') then end
        if pie.PieMenuItem('Test3', false) then end
        if pie.BeginPieMenu('Sub') then
                if pie.BeginPieMenu('Sub sub\nmenu') then
                if pie.PieMenuItem('SubSub') then end
                if pie.PieMenuItem('SubSub2') then end
                pie.EndPieMenu()
                end
                if pie.PieMenuItem('TestSub') then end
                if pie.PieMenuItem('TestSub2') then end
        pie.EndPieMenu()
        end
        pie.EndPiePopup()
        end
    end
end
При нажатии на клавишу выдает краш:

Нарушение прав доступа.
Time playing: 00:00:36
Address: 0x6AC4550A
Code: 0xC0000005

Registers:
EAX: 0x18556640 | ECX: 0x00000000
EDX: 0x00000000 | EBX: 0x0177F010
ESP: 0x0177F178 | EBP: 0x00000000
ESI: 0x00000000 | EDI: 0x187B86A0
Flags: 0x0001007F

Trace:
0: 0x6AC4550A in cimguidx9.DLL + 1550A
1: 0x6CDC475B in lua51.dll + 475B
2: 0x6CDD4ED5 in lua51.dll + 14ED5
3: 0x6CE0B9F3 in lua51.dll + 4B9F3
4: 0x6CDC280D in lua51.dll + 280D
5: 0x6CDC73EB in lua51.dll + 73EB
6: 0x6CE692B2 in MoonLoader.asi + 92B2
7: 0x6CE65CA0 in MoonLoader.asi + 5CA0
 

lorgon

Известный
657
268
Ты видимо не понял, что я имею ввиду(хотя я и сам уже ничего не понимаю 🥲). Покажу наглядно:
Посмотреть вложение 128498
Lua:
imgui.SetNextWindowPos(imgui.ImVec2(tonumber(varUnderChat.w+x+10), y+10), imgui.Cond.FirstUseEver, imgui.ImVec2(0, 0))
imgui.SetNextWindowSize(imgui.ImVec2(500, 250), imgui.Cond.FirstUseEver)
imgui.Begin('MyCharts', varMyChart.show, imgui.WindowFlags.NoDecoration + imgui.WindowFlags.NoInputs + imgui.WindowFlags.AlwaysAutoResize)
imgui.Text(tostring(x+varUnderChat.w+10))
imgui.End()
Тут видно, что эта строка (imgui.Text(tostring(x+varUnderChat.w+10))) выводит 201, а значит и в первой строке выставление позиции там стоит 201
Посмотреть вложение 128497
Lua:
imgui.SetNextWindowPos(imgui.ImVec2(201, y+10), imgui.Cond.FirstUseEver, imgui.ImVec2(0, 0))
imgui.SetNextWindowSize(imgui.ImVec2(500, 250), imgui.Cond.FirstUseEver)
imgui.Begin('MyCharts', varMyChart.show, imgui.WindowFlags.NoDecoration + imgui.WindowFlags.NoInputs + imgui.WindowFlags.AlwaysAutoResize)
imgui.Text(tostring(x+varUnderChat.w+10))
imgui.End()
up
 

Shepi

Активный
178
37
ребятки, я проебал функцию где можно узнать в какую сторону смотрит игрок. Помогите найти если не трудно(
 

Lolikas

Участник
32
0
Привет, как бы я мог сделать, если бы в диалоге было только «1». а не '1. и 2. ' закрывать?
Lua:
function sampev.onShowDialog(id, style, title, button1, button2, text)
    if dialogas and title == 'Ataskaita' then
        for line in text:gmatch("[^\n\r]+") do
            if line:find("1.") then
                pirmaeilute = true
            end
            if pirmaeilute and line:find('2.') then
                sk = sk + 1
                sampAddChatMessage("Jo", -1)
            table.insert(nicks, nickas)
            sampSendDialogResponse(id, 0, 0, nil)
            pirmaeilute = false
            return false
           -- else
                --sampSendDialogResponse(id, 0, 0, nil)
                --return false
        end
    end
end
    if dialogas and title == 'Ataskaita' then
        for line in text:gmatch("[^\n\r]+") do
            if pirmaeilute and not line:find('2.') then
                sampAddChatMessage('SU VIENU', -1)
                sampSendDialogResponse(id, 0, 0, nil)
                pirmaeilute = false
                return false
      
            end
        end
    end
end
 
D

deleted-user-422095

Гость
как развернуть окно с игрой?
 

MAHEKEH

Известный
1,990
494
как перемещать окно по экрану?
я этим интересовался пару месяцев назад но быстро забил, получалось перемещать окошко через команду, щас пробовал что то подобное, ничего не вышло.

вводом смд чето такое делал

Lua:
-- local Pos_X = 99.9
-- Pos_X = img..float(99)
-- Pos_X = img..int(99)

--где то там вначале было

sampRegisterChatCommand("sds", POSITION)

--- imgui ---

imgui.SetNextWindowPos(imgui.ImVec2(Pos_X.v, 1.0), imgui.Cond.FirstUseEver)

--- imgui ---

function POSITION(arg)
Pos_X.v = arg
end
 

misterbebra

Новичок
22
0
Как сделать вывод текста на экран?
По типу такого:
1640697627107.png
 

Andrinall

Известный
680
532
Как сделать вывод текста на экран?
По типу такого:
Посмотреть вложение 128709


Lua:
local font = renderCreateFont("Arial", 15, 5) -- "font name", size, flags

function main()
    while true do wait(0)
        renderFontDrawText(font, "Text", 20, 300, 0xFFFFFFFF) -- поддерживает HEX-код цвета(RGB и ARGB). "{FFFFFF}Test {F0F0F0}Text"
    end
end

Так же можно выводить текст с помощью имгуи, через
Lua:
local dl = imgui.GetBackgroundDrawList()
dl:AddText(imgui.ImVec2(x, y)--[[ позиция ]], 0xFFFFFFFF--[[ ARGB вроде ]], "Text"--[[ text_begin ]])

-- такой код можно использовать без imgui.Begin()
 
  • Bug
Реакции: Sanchez.

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,778
11,223
почему renderDrawLine полупрозрачные если в зоне стрима много людей?
1640704432548.png

Lua:
if active.v then
            --if pl.nicks.v then
            --    nameTagOn()
            --else
            --    nameTagOff()
            --end
            --PEDS
            for k, v in pairs(getAllChars()) do
                if pl.workonme.v == false and v ~= PLAYER_PED or pl.workonme.v == true then
                    
                    local resX, resY = getScreenResolution()
                    local myX, myY, myZ = getCharCoordinates(PLAYER_PED)
                    local pedX, pedY, pedZ = getCharCoordinates(v)
                    local prX, prY = convert3DCoordsToScreen(pedX, pedY, pedZ)
                    local result, id = sampGetPlayerIdByCharHandle(v)
                    if result and isCharOnScreen(v) then
                        local color = sampGetPlayerColor(id)
                        -- BONES
                        if pl.bones.v then
                            local i = v
                            local thickness = pl.bones_thickness.v
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(6, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(7, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(7, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(8, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(8, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(6, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)

                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(1, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(4, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(4, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(8, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)

                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(21, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(22, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(22, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(23, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(23, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(24, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(24, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(25, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)

                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(31, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(32, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(32, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(33, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(33, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(34, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(34, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(35, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)

                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(1, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(51, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(51, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(52, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(52, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(53, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(53, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(54, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)

                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(1, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(41, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(41, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(42, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(42, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(43, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(43, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(44, i)
                            
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                        end
                        --TRACERS
                        if pl.tracers.v then
                            local tracer_pointFrom = {x = 0, y = 0}
                            if pl.tracers_mode.v == 0 then
                                tracer_pointFrom.x, tracer_pointFrom.y = convert3DCoordsToScreen(myX, myY, myZ)
                            elseif pl.tracers_mode.v == 1 then
                                tracer_pointFrom.x, tracer_pointFrom.y = resX / 2, 0
                            elseif pl.tracers_mode.v == 2 then
                                tracer_pointFrom.x, tracer_pointFrom.y = resX / 2, resY
                            end
                            if isPointOnScreen(pedX, pedY, pedZ, 1) then
                                renderDrawLine(tracer_pointFrom.x, tracer_pointFrom.y, prX, prY, pl.tracers_thickness.v, color)
                            end
                        end
                        -- BOXES
                        if pl.box.v then
                            if pl.box_mode.v == 0 then
                                local c = getCharModelCornersIn2d(getCharModel(v), v)
                                renderDrawLine(c[1][1], c[1][2], c[2][1], c[2][2], pl.box_thickness.v, color)
                                renderDrawLine(c[2][1], c[2][2], c[3][1], c[3][2], pl.box_thickness.v, color)
                                renderDrawLine(c[3][1], c[3][2], c[4][1], c[4][2], pl.box_thickness.v, color)
                                renderDrawLine(c[4][1], c[4][2], c[1][1], c[1][2], pl.box_thickness.v, color)
                                renderDrawLine(c[5][1], c[5][2], c[6][1], c[6][2], pl.box_thickness.v, color)
                                renderDrawLine(c[6][1], c[6][2], c[7][1], c[7][2], pl.box_thickness.v, color)
                                renderDrawLine(c[7][1], c[7][2], c[8][1], c[8][2], pl.box_thickness.v, color)
                                renderDrawLine(c[8][1], c[8][2], c[5][1], c[5][2], pl.box_thickness.v, color)
                                renderDrawLine(c[1][1], c[1][2], c[5][1], c[5][2], pl.box_thickness.v, color)
                                renderDrawLine(c[2][1], c[2][2], c[8][1], c[8][2], pl.box_thickness.v, color)
                                renderDrawLine(c[3][1], c[3][2], c[7][1], c[7][2], pl.box_thickness.v, color)
                                renderDrawLine(c[4][1], c[4][2], c[6][1], c[6][2], pl.box_thickness.v, color)
                            elseif pl.box_mode.v == 1 then
                                size = 1
                                size_vertical = 0.3
                                --type 1 (by Head)
                                local head_pos = {getBodyPartCoordinates(8, v)}
                                local leg_pos = {getBodyPartCoordinates(44, v)}
                                local pos_1 = {convert3DCoordsToScreen(head_pos[1], head_pos[2], head_pos[3] + 0.2)}
                                local pos_2 = {convert3DCoordsToScreen(head_pos[1], head_pos[2], head_pos[3] - (head_pos[3] - leg_pos[3]) - 0.1)}
                                a = boxWidth(pos_1[2], pos_2[2])
                                local box_corners = {
                                    {pos_1[1] - a, pos_1[2]},
                                    {pos_1[1] + a, pos_1[2]},
                                    {pos_2[1] - a, pos_2[2]},
                                    {pos_2[1] + a, pos_2[2]}
                                }
                                renderDrawLine(box_corners[1][1], box_corners[1][2], box_corners[2][1], box_corners[2][2], pl.box_thickness.v, sampGetPlayerColor(select(2, sampGetPlayerIdByCharHandle(v))))
                                renderDrawLine(box_corners[3][1], box_corners[3][2], box_corners[4][1], box_corners[4][2], pl.box_thickness.v, sampGetPlayerColor(select(2, sampGetPlayerIdByCharHandle(v))))
                                renderDrawLine(box_corners[1][1], box_corners[1][2], box_corners[3][1], box_corners[3][2], pl.box_thickness.v, sampGetPlayerColor(select(2, sampGetPlayerIdByCharHandle(v))))
                                renderDrawLine(box_corners[2][1], box_corners[2][2], box_corners[4][1], box_corners[4][2], pl.box_thickness.v, sampGetPlayerColor(select(2, sampGetPlayerIdByCharHandle(v))))
                            end
                        end
                    end
                end
            end
 

Dredegar

Новичок
7
0
как сделать автовзятие нарко и матов из сейфа [samp-rp] по заданному нужному кол-ву?
 

Andrinall

Известный
680
532
почему renderDrawLine полупрозрачные если в зоне стрима много людей?
Посмотреть вложение 128721
Lua:
if active.v then
            --if pl.nicks.v then
            --    nameTagOn()
            --else
            --    nameTagOff()
            --end
            --PEDS
            for k, v in pairs(getAllChars()) do
                if pl.workonme.v == false and v ~= PLAYER_PED or pl.workonme.v == true then
                   
                    local resX, resY = getScreenResolution()
                    local myX, myY, myZ = getCharCoordinates(PLAYER_PED)
                    local pedX, pedY, pedZ = getCharCoordinates(v)
                    local prX, prY = convert3DCoordsToScreen(pedX, pedY, pedZ)
                    local result, id = sampGetPlayerIdByCharHandle(v)
                    if result and isCharOnScreen(v) then
                        local color = sampGetPlayerColor(id)
                        -- BONES
                        if pl.bones.v then
                            local i = v
                            local thickness = pl.bones_thickness.v
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(6, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(7, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                           
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(7, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(8, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                           
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(8, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(6, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)

                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(1, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(4, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                           
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(4, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(8, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)

                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(21, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(22, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                           
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(22, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(23, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                           
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(23, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(24, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                           
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(24, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(25, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)

                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(31, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(32, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                           
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(32, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(33, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                           
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(33, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(34, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                           
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(34, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(35, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)

                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(1, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(51, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(51, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(52, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                           
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(52, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(53, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                           
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(53, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(54, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)

                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(1, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(41, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                           
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(41, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(42, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                           
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(42, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(43, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                           
                            pos1X, pos1Y, pos1Z = getBodyPartCoordinates(43, i)
                            pos2X, pos2Y, pos2Z = getBodyPartCoordinates(44, i)
                           
                            pos1, pos2 = convert3DCoordsToScreen(pos1X, pos1Y, pos1Z)
                            pos3, pos4 = convert3DCoordsToScreen(pos2X, pos2Y, pos2Z)
                            renderDrawLine(pos1, pos2, pos3, pos4, thickness, color)
                        end
                        --TRACERS
                        if pl.tracers.v then
                            local tracer_pointFrom = {x = 0, y = 0}
                            if pl.tracers_mode.v == 0 then
                                tracer_pointFrom.x, tracer_pointFrom.y = convert3DCoordsToScreen(myX, myY, myZ)
                            elseif pl.tracers_mode.v == 1 then
                                tracer_pointFrom.x, tracer_pointFrom.y = resX / 2, 0
                            elseif pl.tracers_mode.v == 2 then
                                tracer_pointFrom.x, tracer_pointFrom.y = resX / 2, resY
                            end
                            if isPointOnScreen(pedX, pedY, pedZ, 1) then
                                renderDrawLine(tracer_pointFrom.x, tracer_pointFrom.y, prX, prY, pl.tracers_thickness.v, color)
                            end
                        end
                        -- BOXES
                        if pl.box.v then
                            if pl.box_mode.v == 0 then
                                local c = getCharModelCornersIn2d(getCharModel(v), v)
                                renderDrawLine(c[1][1], c[1][2], c[2][1], c[2][2], pl.box_thickness.v, color)
                                renderDrawLine(c[2][1], c[2][2], c[3][1], c[3][2], pl.box_thickness.v, color)
                                renderDrawLine(c[3][1], c[3][2], c[4][1], c[4][2], pl.box_thickness.v, color)
                                renderDrawLine(c[4][1], c[4][2], c[1][1], c[1][2], pl.box_thickness.v, color)
                                renderDrawLine(c[5][1], c[5][2], c[6][1], c[6][2], pl.box_thickness.v, color)
                                renderDrawLine(c[6][1], c[6][2], c[7][1], c[7][2], pl.box_thickness.v, color)
                                renderDrawLine(c[7][1], c[7][2], c[8][1], c[8][2], pl.box_thickness.v, color)
                                renderDrawLine(c[8][1], c[8][2], c[5][1], c[5][2], pl.box_thickness.v, color)
                                renderDrawLine(c[1][1], c[1][2], c[5][1], c[5][2], pl.box_thickness.v, color)
                                renderDrawLine(c[2][1], c[2][2], c[8][1], c[8][2], pl.box_thickness.v, color)
                                renderDrawLine(c[3][1], c[3][2], c[7][1], c[7][2], pl.box_thickness.v, color)
                                renderDrawLine(c[4][1], c[4][2], c[6][1], c[6][2], pl.box_thickness.v, color)
                            elseif pl.box_mode.v == 1 then
                                size = 1
                                size_vertical = 0.3
                                --type 1 (by Head)
                                local head_pos = {getBodyPartCoordinates(8, v)}
                                local leg_pos = {getBodyPartCoordinates(44, v)}
                                local pos_1 = {convert3DCoordsToScreen(head_pos[1], head_pos[2], head_pos[3] + 0.2)}
                                local pos_2 = {convert3DCoordsToScreen(head_pos[1], head_pos[2], head_pos[3] - (head_pos[3] - leg_pos[3]) - 0.1)}
                                a = boxWidth(pos_1[2], pos_2[2])
                                local box_corners = {
                                    {pos_1[1] - a, pos_1[2]},
                                    {pos_1[1] + a, pos_1[2]},
                                    {pos_2[1] - a, pos_2[2]},
                                    {pos_2[1] + a, pos_2[2]}
                                }
                                renderDrawLine(box_corners[1][1], box_corners[1][2], box_corners[2][1], box_corners[2][2], pl.box_thickness.v, sampGetPlayerColor(select(2, sampGetPlayerIdByCharHandle(v))))
                                renderDrawLine(box_corners[3][1], box_corners[3][2], box_corners[4][1], box_corners[4][2], pl.box_thickness.v, sampGetPlayerColor(select(2, sampGetPlayerIdByCharHandle(v))))
                                renderDrawLine(box_corners[1][1], box_corners[1][2], box_corners[3][1], box_corners[3][2], pl.box_thickness.v, sampGetPlayerColor(select(2, sampGetPlayerIdByCharHandle(v))))
                                renderDrawLine(box_corners[2][1], box_corners[2][2], box_corners[4][1], box_corners[4][2], pl.box_thickness.v, sampGetPlayerColor(select(2, sampGetPlayerIdByCharHandle(v))))
                            end
                        end
                    end
                end
            end
У тебя цвет получается через local color = sampGetPlayerColor(id)
Посмотри на радар, если иконки там полупрозрачные - ничего удивительного в полупрозрачных линиях нет.