Вопросы по 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
 
Последнее редактирование:

thebestsupreme

Участник
170
12
Код:
function main()

    while not  isSampAvailable() do wait(100) end

    imgui.Process = false

    _, id = sampGetPlayerIdByCharHandle(PLAYER_PED)

    name = sampGetPlayerNickname(id)

    if name ~= "Christopher_Kot" then

        sampAddChatMessage("Ваш {00fab3}[ATools+]:{ffffff} не активирован : {5A90CE}vk.com/atoolsmaze", -1)

        thisScript():unload()

    end

    sampRegisterChatCommand('amenu', cmd_amenu, function()

    main_window_state.v = not main_window_state.v

    sampAddChatMessage(tag .. "Что бы скрыть/показать курсор нажмините на клавишу {00fab3}", -1)

    end)

    sampRegisterChatCommand('pr', function(id)

        lua_thread.create(function()

        sampSendChat(string.format('/pm %s Уважаемый игрок, передал ваш Report администратору!', id))

        wait(1000)

        sampShowDialog(19, "Репорт", "Введите репорт который надо передать!", "Передать", "Отмена", 1)

    end)

end)

    sampRegisterChatCommand('prs', function(id)

        lua_thread.create(function()

        sampSendChat(string.format('/pm %s Уважаемый игрок, передал ваш Report Главному Следящему|Следящему!', id))

        wait(1200)

        sampSendChat(string.format('/a [Репорт] [ID:%s] Обращается к Главному Следящего|Следящему', id))

        wait(1200)

        sampShowDialog(21, "Просит передать информация", "Что он хочет?", "На набор", "тп", 0)

    end)

end)

    sampRegisterChatCommand('prp', function(id)

        lua_thread.create(function()

        sampSendChat(string.format('/pm %s Уважаемый игрок, передал ваш Report Пиар-Менеджеру|Зам.Пиар-Менеджера', id))

        wait(1200)

        sampSendChat(string.format('/a [Репорт] [ID:%s] Обращается к Пиар-Менеджеру|Зам.Пиар-Менеджера', id))

        wait(1200)

        sampShowDialog(22, "Просит передать информация", "Что он хочет?", "В по", "тп", 0)

    end)

end)

sampRegisterChatCommand('form', cmd_form , function(id)

    lua_thread.create(function()

    main_window_form.v = not main_window_form.v

    sampAddChatMessage(tag .. "Что бы скрыть/показать курсор нажмините на клавишу {00fab3}", -1)

    end)

end)

    sampRegisterChatCommand('pcar', function(id)

        lua_thread.create(function()

        sampSendChat(string.format('/pm %s Уважаемый игрок, выдал вам временный "Велосипед"', id))

        wait(1200)

        sampSendChat(string.format('/pm %s Если вы упадёте с "Велоспида" то он продадёт.', id))

        wait(1200)

        sampSendChat(string.format('/plveh %s 510 1 1', id))

    end)

end)

    sampRegisterChatCommand('sn', function(id)

        lua_thread.create(function()

        sampSendChat(string.format('/pm %s Уважаемый игрок, слежу за нарушителем!', id))

        wait(1000)

        sampShowDialog(51, "Авто-Слежка", "Введите ID нарушителя", "Следить", "Отмена", 1)

    end)

end)

    sampRegisterChatCommand('pmch', function(id)

        lua_thread.create(function()

        sampSendChat(string.format('/pm %s Уважаемый игрок, сейчас попытаюсь вам помочь!', id))

        wait(1150)

        sampSendChat(string.format('/re %s', id))

    end)

end)

    sampRegisterChatCommand('jb', function(id)

        lua_thread.create(function()

        sampSendChat(string.format('/pm %s Уважаемый игрок, если вы не согласны с наказанием пишите жалобу на форум', id))

        wait(1150)

        sampSendChat(string.format('/pm %s Главный раздел->Жалобы на Администрацию/Лидеров/Игроков->Отправить жалобу на Администратора', id))

    end)

end)

    sampRegisterChatCommand('of', function(id)

        sampSendChat(string.format('/pm %s Уважаемый игрок, пожалуйста прекратите оффтопить! 1/2', id))

    end)

    sampRegisterChatCommand('of2', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/pm %s Уважаемый игрок, пожалуйста, в следующий раз не оффтопьте! 2/2', id))

            wait(1200)

            sampSendChat(string.format('/mute %s 5 offtop', id))

        end)

    end)

    sampRegisterChatCommand('tb', function(id)

        sampSendChat(string.format('/pm %s Уважаемый игрок, ожидайте обзвона, вас оповестят в чате, без обзвона лидерку не выдаем!', id))

    end)

    sampRegisterChatCommand('npa', function(id)

    sampSendChat(string.format('/awarn %s Нарушение Правил Администрации', id))

    end)

    sampRegisterChatCommand('rput', function(id)

        sampSendChat(string.format('/pm %s Уважаемый игрок, сделайте это РП путем! Администратор не может вмешиваться в РП процесс!', id))

    end)

    sampRegisterChatCommand('nv', function(id)

        sampSendChat(string.format('/pm %s Уважаемый игрок, не выдаем!', id))

    end)

    sampRegisterChatCommand('ch', function(id)

        sampSendChat(string.format('/warn %s Использование Чит-Программ', id))

    end)

    sampRegisterChatCommand('vch', function(id)

        sampSendChat(string.format('/ban %s 7 Вред.Читы', id))

    end)

    sampRegisterChatCommand('caps', function(id)

        sampSendChat(string.format('/mute %s 5 Caps Lock', id))

    end)

    sampRegisterChatCommand('osk', function(id)

        sampSendChat(string.format('/mute %s 10 Оск. Адм./Игроков', id))

    end)

    sampRegisterChatCommand('mq', function(id)

        sampSendChat(string.format('/ban %s 7 Упом. Родни', id))

    end)

    sampRegisterChatCommand('3', function(id)

        sampSendChat(string.format('/banan %s Слив/Реклама', id))

    end)

    sampRegisterChatCommand('flood', function(id)

        sampSendChat(string.format('/mute %s 5 flood', id))

    end)

    sampRegisterChatCommand('relog', function(id)

        sampSendChat(string.format('/sban %s relog', id))

    end)

    sampRegisterChatCommand('k', function(id)

        sampSendChat(string.format('/vadgo %s ', id))

    end)

    sampRegisterChatCommand('kk', function(id)

        sampSendChat(string.format('/evad %s', id))

    end)

    sampRegisterChatCommand('cop', function(id)

        sampSendChat(string.format('/prison %s 5 Cop in Ghetto', id))

    end)

    sampRegisterChatCommand('afjb', function(id)

        sampSendChat(string.format('/awarn %s Жалоба на Форуме', id))

    end)

    sampRegisterChatCommand('dm', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/prison %s 10 DeathMatch', id))

            wait(1200)

            sampSendChat(string.format('/pm %s DM - Death Match, убийство игрока без причины. Вы были наказаны за DM.', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Если Вы не согласны с наказанием, пишите жалобу на: forum.maze-rp.ru!', id))

        end)

    end)

    sampRegisterChatCommand('kb', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/kban %s 5 Некк. | Ложный ответ', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Вы получили бан команд за ложный/неккоректный ответ на репорт.', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Если Вы не согласны с наказанием, пишите жалобу на: forum.maze-rp.ru!', id))

        end)

    end)

    sampRegisterChatCommand('aa', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/pm %s Здравствуйте. Вы получили наказание за жалобу на форуме.', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Если Вы не согласны с нарушением, оставьте аппеляцию на модератора в разделе:', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Жалобы на Администрацию/Игроков/Лидеров > Отправить апелляцию на решение модератора: forum.maze-rp.ru!', id))

        end)

    end)

    sampRegisterChatCommand('eva', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/kban %s 5 /evad | /vadgo', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Вы получили бан команд за ошибки/мг, которые вы пропустили в /vad.', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Если Вы не согласны с наказанием, пишите жалобу на: forum.maze-rp.ru!', id))

        end)

    end)

    sampRegisterChatCommand('db', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/prison %s 10 DriveBy', id))

            wait(1200)

            sampSendChat(string.format('/pm %s DriveBy - убийство игрока автомобилем. Вы были наказаны за DB.', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Если Вы не согласны с наказанием, пишите жалобу на: forum.maze-rp.ru!', id))

        end)

    end)

    sampRegisterChatCommand('tk', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/prison %s 10 Team Kill', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Team Kill - убийство игрока своей же фракции. Вы были наказаны за TK.', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Если Вы не согласны с наказанием, пишите жалобу на: forum.maze-rp.ru!', id))

        end)

    end)

    sampRegisterChatCommand('sk', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/prison %s 10 Spawn Kill', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Spawn Kill - убийство игроков на точке спавна. Вы были наказаны за SK.', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Если Вы не согласны с наказанием, пишите жалобу на: forum.maze-rp.ru!', id))

        end)

    end)

    sampRegisterChatCommand('mg', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/mute %s 1 MetaGaming', id))

            wait(1200)

            sampSendChat(string.format('/pm %s MetaGaming - Использование OOC ин-ции в IC чат. Вы были наказаны за MG.', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Если Вы не согласны с наказанием, пишите жалобу на: forum.maze-rp.ru!', id))

        end)

    end)

    sampRegisterChatCommand('bb', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/makeadmin %s 1', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Поздравляю Вас. Вы получили права администратора 1 уровня.', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Для того, чтобы авторизироваться в админке, введите /alogin и пароль!', id))

            wait(1000)

            sampSendChat(string.format('/pm %s Ваш ADM пароль будет сообщен через пару секунд. Приятного дня!', id))

        end)

    end)

    sampRegisterChatCommand('pmg', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/pm %s Ув.Игрок, я Вам помог. Надеюсь Вы остались довольны. Приятного дня!', id))

        end)

    end)

    sampRegisterChatCommand('afk', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/pm %s Ув.Игрок, Вы подозреваетесь в AFK без ESC.', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Если вы тут, просьба написать "+" в чат!', id))

            wait(1200)

            sampSendChat(string.format('/pm %s В противном случае я буду вынужден Вас кикнуть!', id))

        end)

    end)

    sampRegisterChatCommand('nak2', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/pm %s Жалобу на администратора вы можете оставить на нашем форуме - forum.maze-rp.ru.', id))

        end)

    end)

    sampRegisterChatCommand('admm', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/pm %s Здравствуйте. На нашем проекте права администратора можно получить при:', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Вводе команды /adm в игровой чат. Быть "Пиарщиком", отстоять лидерку, сотрудничать с проектом.', id))

        end)

    end)

    sampRegisterChatCommand('nrp', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/pm %s Ув.Игрок, просьба сменить ваш NonRP nick на РП: Name_Surname! ', id))

            wait(1200)

            sampSendChat(string.format('/pm %s Это позволит Вам полноценно играть на нашем проекте...', id))

            wait(1200)

            sampSendChat(string.format('/pm %s ...А также успешно трудоустроиться в любую фракцию!', id))

        end)

    end)

    sampRegisterChatCommand('al', function(id)

        lua_thread.create(function()

            sampSendChat(string.format('/alogin', id))

            wait(10000)

            sampSendChat(string.format('/agm', id))

            wait(1200)

            sampSendChat(string.format('/lammo', id))

            wait(1200)

            sampSendChat(string.format('/btrack', id))

            wait(1200)

            sampSendChat(string.format('/showmc', id))

            wait(1200)

            sampSendChat(string.format('/showbc', id))

            wait(1000)

            sampSendChat(string.format('/a [ATools+] На данный момент свободен - Режим: [Ожидание]', id))

            wait(1200)

        end)

    end)

    sampRegisterChatCommand('amg', function(ids)

        local idnar = string.sub(ids, 0, string.find(ids, "%s"))

                sampAddChatMessage(ids, -1)

        local idadm = string.sub(ids, string.find(ids, "%s") + 1, string.len(ids))

        local name = sampGetPlayerNickname(idadm) -- вот это строки не было

        local adminname = string.sub(name, 0, 1) .. '.' .. string.sub(name, string.find(name, '_') + 1, string.len(name))

        sampSendChat(string.format('/mute %s 1 MG || ' .. adminname, idnar))

    end)

    sampRegisterChatCommand('ach', function(ids)

        local idnar = string.sub(ids, 0, string.find(ids, "%s"))

                sampAddChatMessage(ids, -1)

        local idadm = string.sub(ids, string.find(ids, "%s") + 1, string.len(ids))

        local name = sampGetPlayerNickname(idadm) -- вот это строки не было

        local adminname = string.sub(name, 0, 1) .. '.' .. string.sub(name, string.find(name, '_') + 1, string.len(name))

        sampSendChat(string.format('/warn %s Cheats || ' .. adminname, idnar))

    end)

    sampRegisterChatCommand('avch', function(ids)

        local idnar = string.sub(ids, 0, string.find(ids, "%s"))

                sampAddChatMessage(ids, -1)

        local idadm = string.sub(ids, string.find(ids, "%s") + 1, string.len(ids))

        local name = sampGetPlayerNickname(idadm) -- вот это строки не было

        local adminname = string.sub(name, 0, 1) .. '.' .. string.sub(name, string.find(name, '_') + 1, string.len(name))

        sampSendChat(string.format('/ban %s 7 Vred. Cheats || ' .. adminname, idnar))

    end)

    sampRegisterChatCommand('dma', function(ids)

        local idnar = string.sub(ids, 0, string.find(ids, "%s"))

                sampAddChatMessage(ids, -1)

        local idadm = string.sub(ids, string.find(ids, "%s") + 1, string.len(ids))

        local name = sampGetPlayerNickname(idadm) -- вот это строки не было

        local adminname = string.sub(name, 0, 1) .. '.' .. string.sub(name, string.find(name, '_') + 1, string.len(name))

        sampSendChat(string.format('/prison %s 10 DeathMatch || ' .. adminname, idnar))

    end)

    sampRegisterChatCommand('atk', function(ids)

        local idnar = string.sub(ids, 0, string.find(ids, "%s"))

                sampAddChatMessage(ids, -1)

        local idadm = string.sub(ids, string.find(ids, "%s") + 1, string.len(ids))

        local name = sampGetPlayerNickname(idadm) -- вот это строки не было

        local adminname = string.sub(name, 0, 1) .. '.' .. string.sub(name, string.find(name, '_') + 1, string.len(name))

        sampSendChat(string.format('/prison %s 10 TeamKill || ' .. adminname, idnar))

    end)

    sampRegisterChatCommand('ask', function(ids)

        local idnar = string.sub(ids, 0, string.find(ids, "%s"))

                sampAddChatMessage(ids, -1)

        local idadm = string.sub(ids, string.find(ids, "%s") + 1, string.len(ids))

        local name = sampGetPlayerNickname(idadm) -- вот это строки не было

        local adminname = string.sub(name, 0, 1) .. '.' .. string.sub(name, string.find(name, '_') + 1, string.len(name))

        sampSendChat(string.format('/prison %s 10 SpawnKill || ' .. adminname, idnar))

    end)

    sampRegisterChatCommand('amq', function(ids)

        local idnar = string.sub(ids, 0, string.find(ids, "%s"))

                sampAddChatMessage(ids, -1)

        local idadm = string.sub(ids, string.find(ids, "%s") + 1, string.len(ids))

        local name = sampGetPlayerNickname(idadm) -- вот это строки не было

        local adminname = string.sub(name, 0, 1) .. '.' .. string.sub(name, string.find(name, '_') + 1, string.len(name))

        sampSendChat(string.format('/ban %s 7 Упом.Родни || ' .. adminname, idnar))

    end)

    sampRegisterChatCommand('aeva', function(ids)

        local idnar = string.sub(ids, 0, string.find(ids, "%s"))

                sampAddChatMessage(ids, -1)

        local idadm = string.sub(ids, string.find(ids, "%s") + 1, string.len(ids))

        local name = sampGetPlayerNickname(idadm) -- вот это строки не было

        local adminname = string.sub(name, 0, 1) .. '.' .. string.sub(name, string.find(name, '_') + 1, string.len(name))

        sampSendChat(string.format('/kban %s 5 /evad | /vadgo || ' .. adminname, idnar))

    end)

    sampRegisterChatCommand('arelog', function(ids)

        local idnar = string.sub(ids, 0, string.find(ids, "%s"))

                sampAddChatMessage(ids, -1)

        local idadm = string.sub(ids, string.find(ids, "%s") + 1, string.len(ids))

        local name = sampGetPlayerNickname(idadm) -- вот это строки не было

        local adminname = string.sub(name, 0, 1) .. '.' .. string.sub(name, string.find(name, '_') + 1, string.len(name))

        sampSendChat(string.format('/sban %s relog || ' .. adminname, idnar))

    end)

    sampRegisterChatCommand('adb', function(ids)

        local idnar = string.sub(ids, 0, string.find(ids, "%s"))

                sampAddChatMessage(ids, -1)

        local idadm = string.sub(ids, string.find(ids, "%s") + 1, string.len(ids))

        local name = sampGetPlayerNickname(idadm) -- вот это строки не было

        local adminname = string.sub(name, 0, 1) .. '.' .. string.sub(name, string.find(name, '_') + 1, string.len(name))

        sampSendChat(string.format('/prison %s 10 DriveBy || ' .. adminname, idnar))

    end)

    sampRegisterChatCommand('acop', function(ids)

        local idnar = string.sub(ids, 0, string.find(ids, "%s"))

                sampAddChatMessage(ids, -1)

        local idadm = string.sub(ids, string.find(ids, "%s") + 1, string.len(ids))

        local name = sampGetPlayerNickname(idadm) -- вот это строки не было

        local adminname = string.sub(name, 0, 1) .. '.' .. string.sub(name, string.find(name, '_') + 1, string.len(name))

        sampSendChat(string.format('/prison %s 5 Cop in Ghetto || ' .. adminname, idnar))

    end)

    

    wait(100)

    sampAddChatMessage(tag .. "Скрипт успешно загружен.Автор {00fab3}Christopher_Kot", -1) -- сообщение в чат при заходе

    sampAddChatMessage(tag .. "Что бы активировать меню нажмите на {00fab3}[F2]", -1) -- сообщение в чат при заходе



    while true do

        wait(0)

        if activation then

            local camCoordX, camCoordY, camCoordZ = getActiveCameraCoordinates()

            local targetCamX, targetCamY, targetCamZ = getActiveCameraPointAt()

            local angle = getHeadingFromVector2d(targetCamX - camCoordX, targetCamY - camCoordY)

            local heading = getCharHeading(playerPed)

            setCharCoordinates(playerPed, airbreak_coords[1], airbreak_coords[2], airbreak_coords[3] - 1)

            if isKeyDown(VK_W) then

                airbreak_coords[1] = airbreak_coords[1] + speed * math.sin(-math.rad(angle))

                airbreak_coords[2] = airbreak_coords[2] + speed * math.cos(-math.rad(angle))

                setCharHeading(playerPed, angle)

            elseif isKeyDown(VK_S) then

                airbreak_coords[1] = airbreak_coords[1] - speed * math.sin(-math.rad(heading))

                airbreak_coords[2] = airbreak_coords[2] - speed * math.cos(-math.rad(heading))

            end

          

            if isKeyDown(VK_A) then

                airbreak_coords[1] = airbreak_coords[1] - speed * math.sin(-math.rad(heading - 90))

                airbreak_coords[2] = airbreak_coords[2] - speed * math.cos(-math.rad(heading - 90))

            elseif isKeyDown(VK_D) then

                airbreak_coords[1] = airbreak_coords[1] - speed * math.sin(-math.rad(heading + 90))

                airbreak_coords[2] = airbreak_coords[2] - speed * math.cos(-math.rad(heading + 90))

            end

          

            if isKeyDown(VK_UP) then airbreak_coords[3] = airbreak_coords[3] + speed / 2.0 end

            if isKeyDown(VK_DOWN) and airbreak_coords[3] > -95.0 then airbreak_coords[3] = airbreak_coords[3] - speed / 2.0 end

        end

      

        if isKeyJustPressed(VK_RSHIFT) and isCharOnFoot(playerPed) then

            activation = not activation

            local posX, posY, posZ = getCharCoordinates(playerPed)

            airbreak_coords = {posX, posY, posZ, getCharHeading(playerPed)}

        end



        if isKeyJustPressed(0x6B) then

            speed = speed + 0.1

            printStringNow("speed~r~ "..speed, 1337)

        end



        if isKeyJustPressed(0x6D) then

            speed = speed - 0.1

            printStringNow("speed~r~ "..speed, 1337)

        end

        if isKeyJustPressed(VK_F5) then

            sampSendChat("/gotomark")

        end

        

        if isKeyJustPressed(VK_F2) then

            main_window_state.v = not main_window_state.v

            sampAddChatMessage(tag .. "Что бы скрыть/показать курсор нажмините на клавишу {00fab3}", -1)

        end



        local result, button, list, input = sampHasDialogRespond(10) -- /dialog0 (MsgBox)



        if result then -- если диалог открыт

            if button == 1 then -- если нажата первая кнопка (Выбрать)

                sampAddChatMessage("Приятной игры!", color_dialog)

            end

        end





        local result, button, list, input = sampHasDialogRespond(20) -- /dialog0 (MsgBox)



        if result then -- если диалог открыт

            if button == 1 then -- если нажата первая кнопка (Выбрать)

                sampSendChat("Тогда попрошу вас предоставить их на форум. Приятной игры!")

            else -- если нажата вторая кнопка (Закрыть)

                sampSendChat("Так как у вас нету доказательств, по правилам я обязан выдать вам наказание.")

            end

        end



        local result, button, list, input = sampHasDialogRespond(21) -- /dialog0 (MsgBox)



        if result then -- если диалог открыт

            if button == 1 then -- если нажата первая кнопка (Выбрать)

                sampSendChat("/a [Репорт] Он хочет на обзвон!")

            else -- если нажата вторая кнопка (Закрыть)

                sampSendChat("/a [Репорт] Он просит вас телепортироваться к нему!")

            end

        end

        

        local result, button, list, input = sampHasDialogRespond(22) -- /dialog0 (MsgBox)



        if result then -- если диалог открыт

            if button == 1 then -- если нажата первая кнопка (Выбрать)

                sampSendChat("/a [Репорт] Он хочет в пиар-отдел")

            else -- если нажата вторая кнопка (Закрыть)

                sampSendChat("/a [Репорт] Он просит вас телепортироваться к нему!")

            end

        end



        local result, button, list, input = sampHasDialogRespond(45) -- /dialog0 (MsgBox)



        if result then -- если диалог открыт

            if button == 1 then -- если нажата первая кнопка (Выбрать)

                sampAddChatMessage("Приятной игры!", main_color)

            else -- если нажата вторая кнопка (Закрыть)

                sampSendChat("")

            end

        end



        local result, button, list, input = sampHasDialogRespond(51) -- /dialog1 (InputBox)



        if result then -- если диалог открыт

            if button == 1 then -- если нажата первая кнопка (Выбрать)

                sampSendChat("/re " .. input)

            else -- если нажата вторая кнопка (Закрыть)

                sampAddChatMessage("Приятной игры!", main_color)

            end

        end





        local result, button, list, input = sampHasDialogRespond(12) -- /dialog2 (ListBox)



        if result then -- если диалог открыт

            if button == 1 then -- если нажата первая кнопка (Выбрать)

                if list == 0 then

                    sampShowDialog(13, "Меню", "Введите ID Игрока", "Выбрать", "Закрыть", 1)

                elseif list == 1 then

                    sampAddChatMessage("В диалоге с ID 12 выбран пункт {FFFFFF}" .. list .. " и его содержимое: {FF00FF}" .. dialogArr[list+1], color_dialog)

                elseif list == 2 then

                    sampAddChatMessage("В диалоге с ID 12 выбран пункт {FFFFFF}" .. list .. " и его содержимое: {FF00FF}" .. dialogArr[list+1], color_dialog)

                elseif list == 3 then

                    sampAddChatMessage("В диалоге с ID 12 выбран пункт {FFFFFF}" .. list .. " и его содержимое: {FF00FF}" .. dialogArr[list+1], color_dialog)

                end

            else -- если нажата вторая кнопка (Закрыть)

                sampAddChatMessage("Вы закрыли диалог с ID 12", color_dialog)

            end

        end





        local result, button, list, input = sampHasDialogRespond(13) -- /dialog3 (PasswordBox)



        if result then -- если диалог открыт

            if button == 1 then -- если нажата первая кнопка (Выбрать)

                sampSendChat("/pm " .. input, color_dialog)

            else -- если нажата вторая кнопка (Закрыть)

                sampAddChatMessage("Вы закрыли диалог с ID 13", color_dialog)

            end

        end





        local result, button, list, input = sampHasDialogRespond(14) -- /dialog4 (TabListBox)



        if result then -- если диалог открыт

            if button == 1 then -- если нажата первая кнопка (Выбрать)

                if list == 0 then

                    sampAddChatMessage("В диалоге с ID 14 выбран пункт {FFFFFF}" .. list, color_dialog)

                elseif list == 1 then

                    sampAddChatMessage("В диалоге с ID 14 выбран пункт {FFFFFF}" .. list, color_dialog)

                elseif list == 2 then

                    sampAddChatMessage("В диалоге с ID 14 выбран пункт {FFFFFF}" .. list, color_dialog)

                elseif list == 3 then

                    sampAddChatMessage("В диалоге с ID 14 выбран пункт {FFFFFF}" .. list, color_dialog)

                end

            else -- если нажата вторая кнопка (Закрыть)

                sampAddChatMessage("Вы закрыли диалог с ID 14", color_dialog)

            end

        end



        local result, button, list, input = sampHasDialogRespond(19) -- /dialog19 (InputBox)



        if result then -- если диалог открыт

            if button == 1 then -- если нажата первая кнопка (Выбрать)

                sampSendChat("/a [Репорт] " .. input)

            else -- если нажата вторая кнопка (Закрыть)

                sampAddChatMessage("Приятной игры!", main_color)

            end

        end



        local result, button, list, input = sampHasDialogRespond(15) -- /dialog5 (TabListHeaderBox)



        if result then -- если диалог открыт

            if button == 1 then -- если нажата первая кнопка (Выбрать)

                if list == 0 then

                    sampAddChatMessage("В диалоге с ID 15 выбран пункт {FFFFFF}" .. list, color_dialog)

                elseif list == 1 then

                    sampAddChatMessage("В диалоге с ID 15 выбран пункт {FFFFFF}" .. list, color_dialog)

                elseif list == 2 then

                    sampAddChatMessage("В диалоге с ID 15 выбран пункт {FFFFFF}" .. list, color_dialog)

                elseif list == 3 then

                    sampAddChatMessage("В диалоге с ID 15 выбран пункт {FFFFFF}" .. list, color_dialog)

                end

            else -- если нажата вторая кнопка (Закрыть)

                sampAddChatMessage("Вы закрыли диалог с ID 15", color_dialog)

            end

        end

    end

end

function cmd_form(arg)

    main_window_state.v = not main_window_state.v

    imgui.Process = main_window_state.v



function cmd_amenu(arg)

    main_window_form.v = not main_window_form.v

    imgui.Process = main_window_form.v

end
Ахуеть ты начудил, зачем тебе указатель, поток и функция епта. Но все должно правильно открыватся. Разве что если у тебя imgui.Process = main_window_state.v тогда понятно, но ты не скинул эту часть кода так что хз
Lua:
sampRegisterChatCommand('form', function(id)
    main_window_form.v = not main_window_form.v
    sampAddChatMessage(tag .. "Что бы скрыть/показать курсор нажмините на клавишу {00fab3}[U]", -1)
end)
sampRegisterChatCommand('amenu', function(id)
    main_window_state.v = not main_window_state.v
    sampAddChatMessage(tag .. "Что бы скрыть/показать курсор нажмините на клавишу {00fab3}[U]", -1)
end)
выше
 
Последнее редактирование:

Sub4ikGG

Новичок
14
9
Привет всем.
Как округлить целое число, возможно ли это? (до десятков, сотен и т. д)
 
Последнее редактирование:

thebestsupreme

Участник
170
12
Ребят как сделать что бы я в Inputtext вводил ид
а в sampsendchat ид выводился дайте пример пожалуйста
 

Itachi Uchiha

Участник
124
21
Ребят как сделать что бы я в Inputtext вводил ид
а в sampsendchat ид выводился дайте пример пожалуйста
Lua:
local id = imgui.ImBuffer(256)
--OnDrawFrame
imgui.inputtext(u8"Введи айди", id)
if imgui.Button(u8"Показать паспорт", imgui.ImVec2(160,25)) then
 sampSendChat("/showpass "..id.v)
end
 

chockscrot

Участник
42
1
Lua:
local sampev = require 'lib.samp.events'
require 'lib.moonloader'

function main()
if not isSampLoaded() or not isSampfuncsLoaded() then return end
while not isSampAvailable() do wait(10) end
requestAnimation("POOL") -- download file with animations "POOL"

while true do
if isKeyJustPressed(VK_L) and sampIsChatInputActive() == false then
Activate = not Activate printString(Activate and "<active" or "off", 1000)
end

lua_thread.create(function()
if Activate then
for k, char in pairs(getAllChars()) do
if char ~= PLAYER_PED then
taskPlayAnim(char, "FIGHTIDLE", "PED", 4.0, false, false, false, false, -1)
end
end
elseif not Activate then
removeAnimation('FIGHTIDLE')
end
end)
return true
end

while true do
wait(0)
end
end

function sampev.onApplyPlayerAnimation(id, lib, name, loop, x, y, freeze, time)
print('id: ' .. id .. ' name: ' .. name .. ' time: ' .. time)
end
человек, у меня есть этот код, который заставляет всех вокруг меня делать одну и ту же анимацию при активации, но когда вокруг много игроков, код глючит и деактивируется ... Кто-нибудь может мне помочь?
 

deagle.exe

Новичок
2
0
Как в этот скрипт добавить автоудаление маркера через 30 секунд (например)?

Lua:
function main()
sampRegisterChatCommand('setmarker', function(coords)
local x, y, z = coords:match('(.+), (.+), (.+)') --телепорт по координатам через команду
setMarker(1, x, y, z, 1, -1)
end)
wait(-1)
end

function setMarker(type, x, y, z, radius, color)
    deleteCheckpoint(marker)
    removeBlip(checkpoint)
    checkpoint = addBlipForCoord(x, y, z)
    marker = createCheckpoint(type, x, y, z, 1, 1, 1, radius)
    changeBlipColour(checkpoint, color)
    lua_thread.create(function()
    repeat
        wait(0)
        local x1, y1, z1 = getCharCoordinates(PLAYER_PED)
        until getDistanceBetweenCoords3d(x, y, z, x1, y1, z1) < radius or not doesBlipExist(checkpoint)
        deleteCheckpoint(marker)
        removeBlip(checkpoint)
        addOneOffSound(0, 0, 0, 1149)
    end)
end
 

Fott

Простреленный
3,442
2,300
Как в этот скрипт добавить автоудаление маркера через 30 секунд (например)?

Lua:
function main()
sampRegisterChatCommand('setmarker', function(coords)
local x, y, z = coords:match('(.+), (.+), (.+)') --телепорт по координатам через команду
setMarker(1, x, y, z, 1, -1)
end)
wait(-1)
end

function setMarker(type, x, y, z, radius, color)
    deleteCheckpoint(marker)
    removeBlip(checkpoint)
    checkpoint = addBlipForCoord(x, y, z)
    marker = createCheckpoint(type, x, y, z, 1, 1, 1, radius)
    changeBlipColour(checkpoint, color)
    lua_thread.create(function()
    repeat
        wait(0)
        local x1, y1, z1 = getCharCoordinates(PLAYER_PED)
        until getDistanceBetweenCoords3d(x, y, z, x1, y1, z1) < radius or not doesBlipExist(checkpoint)
        deleteCheckpoint(marker)
        removeBlip(checkpoint)
        addOneOffSound(0, 0, 0, 1149)
    end)
end
 

vladmany

Известный
117
8
Как удалить все чекпоинты на карте? Имеется в виду не на радаре, а на самой карте эти целиндрические красные маркеры. Есть функция удаления одного маркера по его хендлу. Значение хендла там варьируется между 500к, обычным перебором тут не обойтись я думаю.
 

deagle.exe

Новичок
2
0
Форматирование кода
Простите, я совсем новичок в lua разработке, как разумно вставить это в мой скрипт?
function main()
sampRegisterChatCommand('setmarker', function(coords)
local x, y, z = coords:match('(.+), (.+), (.+)') --телепорт по координатам через команду
setMarker(1, x, y, z, 1, -1)
wait(30000)
removeBlip (markerhandle marker)
end)
end

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

thebestsupreme

Участник
170
12
Код:
    if main_window_state.v then
        local ex, ey = getScreenResolution()
        imgui.ShowCursor = true
        imgui.LockPlayer = true
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 6, ey / 6), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(660, 660), imgui.Cond.FirstUseEver)
        imgui.Begin(u8"Панель", main_window_state,imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
        if imgui.CollapsingHeader(u8"Формы для наказаний[Принятие формы]") then
        imgui.InputText(u8'ID Нарушителя[Писать только ID]', idn_text_buffer)
        imgui.InputText(u8'ID Админа[Писать только ID]', aid_text_buffer)
        if imgui.RadioButton("Warn[Cheats]", checked_radio, 1) then
        imgui.SameLine()
        sampSendChat(u8'/a [Forma] '.. idn_text_buffer.v ..' cheats || ' .. aid_text_buffer.v)
        end
    end


как сделать что бы после cheats ||
было по примеру cheats || C.Kot
Выше
sa-mp-012.png
вроде поменял на u8 а ошибка

Код:
function imgui.OnDrawFrame()
    if main_window_state.v then
        local ex, ey = getScreenResolution()
        imgui.ShowCursor = true
        imgui.LockPlayer = true
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 6, ey / 6), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(760, 660), imgui.Cond.FirstUseEver)
        imgui.Begin(u8"Панель", main_window_state,imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
        if imgui.CollapsingHeader(u8"Формы для наказаний[Принятие формы]") then
            imgui.InputText(u8'ID Нарушителя[Писать только ID]', idn_text_buffer)
            imgui.InputText(u8'TAG Админа[Писать только TAG][C.Kot]', aid_text_buffer)
            if imgui.RadioButton("Warn[Cheats]", checked_radio, 1) then
            imgui.SameLine()
            sampSendChat(u8'warn '.. idn_text_buffer.v ..' Cheats || ' .. aid_text_buffer.v)
            end
        end
 
Последнее редактирование:

Fott

Простреленный
3,442
2,300
Код:
    if main_window_state.v then
        local ex, ey = getScreenResolution()
        imgui.ShowCursor = true
        imgui.LockPlayer = true
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 6, ey / 6), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(660, 660), imgui.Cond.FirstUseEver)
        imgui.Begin(u8"Панель", main_window_state,imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
        if imgui.CollapsingHeader(u8"Формы для наказаний[Принятие формы]") then
        imgui.InputText(u8'ID Нарушителя[Писать только ID]', idn_text_buffer)
        imgui.InputText(u8'ID Админа[Писать только ID]', aid_text_buffer)
        if imgui.RadioButton("Warn[Cheats]", checked_radio, 1) then
        imgui.SameLine()
        sampSendChat(u8'/a [Forma] '.. idn_text_buffer.v ..' cheats || ' .. aid_text_buffer.v)
        end
    end


как сделать что бы после cheats ||
было по примеру cheats || C.Kot

Выше
Посмотреть вложение 71846вроде поменял на u8 а ошибка

Код:
function imgui.OnDrawFrame()
    if main_window_state.v then
        local ex, ey = getScreenResolution()
        imgui.ShowCursor = true
        imgui.LockPlayer = true
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 6, ey / 6), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(760, 660), imgui.Cond.FirstUseEver)
        imgui.Begin(u8"Панель", main_window_state,imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
        if imgui.CollapsingHeader(u8"Формы для наказаний[Принятие формы]") then
            imgui.InputText(u8'ID Нарушителя[Писать только ID]', idn_text_buffer)
            imgui.InputText(u8'TAG Админа[Писать только TAG][C.Kot]', aid_text_buffer)
            if imgui.RadioButton("Warn[Cheats]", checked_radio, 1) then
            imgui.SameLine()
            sampSendChat(u8'warn '.. idn_text_buffer.v ..' Cheats || ' .. aid_text_buffer.v)
            end
        end
Lua:
function imgui.OnDrawFrame()
    if main_window_state.v then
        local ex, ey = getScreenResolution()
        imgui.ShowCursor = true
        imgui.LockPlayer = true
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 6, ey / 6), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(760, 660), imgui.Cond.FirstUseEver)
        imgui.Begin(u8"Панель", main_window_state,imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
        if imgui.CollapsingHeader(u8"Формы для наказаний[Принятие формы]") then
            imgui.InputText(u8'ID Нарушителя[Писать только ID]', idn_text_buffer)
            imgui.InputText(u8'TAG Админа[Писать только TAG][C.Kot]', aid_text_buffer)
            if imgui.RadioButton("Warn[Cheats]", checked_radio, 1) then
            imgui.SameLine()
            sampSendChat(u8('warn '.. idn_text_buffer.v ..' Cheats || ' .. aid_text_buffer.v))
            end
        end
 

thebestsupreme

Участник
170
12
Lua:
function imgui.OnDrawFrame()
    if main_window_state.v then
        local ex, ey = getScreenResolution()
        imgui.ShowCursor = true
        imgui.LockPlayer = true
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 6, ey / 6), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(760, 660), imgui.Cond.FirstUseEver)
        imgui.Begin(u8"Панель", main_window_state,imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
        if imgui.CollapsingHeader(u8"Формы для наказаний[Принятие формы]") then
            imgui.InputText(u8'ID Нарушителя[Писать только ID]', idn_text_buffer)
            imgui.InputText(u8'TAG Админа[Писать только TAG][C.Kot]', aid_text_buffer)
            if imgui.RadioButton("Warn[Cheats]", checked_radio, 1) then
            imgui.SameLine()
            sampSendChat(u8('warn '.. idn_text_buffer.v ..' Cheats || ' .. aid_text_buffer.v))
            end
        end
все равно не робит