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

Bogach

Активный
558
27
Подскажите пожалуйста. Можно ли как - то с помощью lua убрать эту хреновину с F4?
 

Bogach

Активный
558
27
Lua:
require 'lib.moonloader'
events = 'lib.samp.events'

function events.onServerMessage(color, msg)
while true do
wait(0)
if msg:find('какойта текст')
wait(100)
sampSendChat("вывод текста")
end
end
end
В функциях же нельзя использовать задержки, а также насколько я помню, есть баг при использовании хука в хуке, т.е, если в хуке используешь sampSendChat, то искомый текст у тебя не покажется в чате. Если конечно не пофиксили этот баг.
 

Eugene Crabs

Активный
544
30
Возник ооочень странный вопрос. Как узнать координаты метки? Штука в полезных сниппетах не пашет, а функция SearchPointOnScreen (примерно такое название) работает не совсем как надо для меня. Есть ли еще какой-нибудь способ узнать координаты? Не?
 

imring

Ride the Lightning
Всефорумный модератор
2,362
2,545
Возник ооочень странный вопрос. Как узнать координаты метки? Штука в полезных сниппетах не пашет, а функция SearchPointOnScreen (примерно такое название) работает не совсем как надо для меня. Есть ли еще какой-нибудь способ узнать координаты? Не?
bool, x, y, z = getTargetBlipCoordinates()
 
  • Нравится
Реакции: Eugene Crabs

for (;;)

Участник
71
31

Jason2222

Известный
180
3
в imGUI есть ограничение символов в одном окне или как?) ввел очень много информации и окно не выводит все до конца. Можно ли исправить как то?

К примеру :D ->

Код:
slreanimation = u8[[Сердечно-легочная реанимация - это комплекс мероприятий направленных 
на оживление организма в случае остановки кровообращения и/или дыхания. 

Наиболее частыми первичными причинами остановки кровообращения служат фибрилляция желудочков, гемодинамически неэффективная желудочковая тахикардия и, реже, электромеханическая 
диссоциация и асистолия. Первичная остановка дыхания также может вызывать остановку кровообращения, но она крайне редко диагностируется на догоспитальном этапе, так как к 
моменту оказания помощи чаще всего уже регистрируется асистолия или фибрилляция желудочков.

Вторичные причины - это постконверсионные ритмы, возникающие после попыток восстановления сердечной деятельности. 
Сердечно-легочная реанимация состоит из двух совершенно независимых, но взаимодополняющих этапов оказания помощи: 
это основные и специализированные реанимационные мероприятия.

Основные реанимационные мероприятия проводятся вне зависимости от причины остановки кровообращения и включают в себя поддержание кровообращения(непрямой массаж сердца), а также 
обеспечение проходимости дыхательных путей и достаточного уровня вентиляции легких (проведение ИВЛ). 
Вероятность сохранения жизни пациента в случае остановки кровообращения обратно пропорциональна периоду времени, от остановки кровообращения до времени начала реанимационных 
мероприятий. Проведение основных реанимационных мероприятий показано во всех случаях остановки кровообращения.

Специализированные реанимационные мероприятия требуют использования лекарственных средств и реанимационного оборудования, но не исключают, а лишь дополняют основные.

ТАКТИКА ПРИ ФИБРИЛЛЯЦИИ ЖЕЛУДОЧКОВ И ГЕМОДИНАМИЧЕСКИ НЕЭФФЕКТИВНОЙ ЖЕЛУДОЧКОВОЙ ТАХИКАРДИИ.
1) Основным способом лечения фибрилляции желудочков является электрическая дефибрилляция. Начальная энергия разряда составляет 200 - 360 Дж . При отсутствии электрического 
дефибриллятора допустимо выполнять прекордиальный удар.
2) При сохранении фибрилляции желудочков повторяют электрический разряд.
3) При неэффективности - возобновляют основные реанимационные мероприятия, производят интубацию трахеи, налаживают венозный доступ.
4) Адреналин 1 мг в/в струйно каждые 3 - 5 мин.
5) Возрастающие дозы адреналина 1-3-5 мг в/в каждые 3 минуты, или применение промежуточных доз 2-5 мг в/в каждые 3-5 минут.
6) Если в течение 1 минуты не восстановлен ритм, то выполняется электрическая дефибрилляция разрядом 360 Дж.
7) При продолжающейся фибрилляции желудочков используют антиаритмические препараты:
Лидокаин 1,5 мг/кг в/в струйно повторяют через 3-5 мин. В случае восстановления кровообращения налаживают непрерывную инфузию лидокаина со скоростью 2-4 мг/мин.
Сульфат магния 1-2 г в/в в течение 1-2 мин.
Предпочтение сульфату магния можно отдать в случае заведомой гипомагниемии, желудочковой тахикардии типа torsade de pointes («пируэт»).
8) Бикарбонат натрия вводят в/в 1 мэкв/кг, повторяя введение 0,5 мэкв/кг каждые 10 мин при сохраняющейся в течение продолжительного времени остановки кровообращения.
Рекомендуется чередовать введение лекарственных препаратов с разрядами дефибриллятора по схеме: “лекарство - разряд - лекарство - разряд”.

ТАКТИКА ПРИ ГЕМОДИНАМИЧЕСКИ НЕЭФФЕКТИВНОЙ ЭЛЕКТРИЧЕСКОЙ АКТИВНОСТИ МИОКАРДА.
Гемодинамически неэффективная электрическая активность миокарда - это условный термин, объединяющий разнородную группу нарушений ритма сердца: электромеханическую диссоциацию, 
желудочковые замещающие ритмы, медленный идиовентрикулярный ритм, брадиаритмии. Они характеризуются неэффективным кровообращением при регистрируемой на ЭКГ электрической 
активности миокарда, отличной от желудочковой тахикардии и фибрилляции желудочков. Практические подходы к лечению позволяют рассматривать эти нарушения ритма в одном разделе.

К сожалению, прогноз при этом виде нарушений ритма плохой, если не устранена причина, вызвавшая остановку кровообращения. К причинам, вызывающим гемодинамически неэффективную 
электрическую активность миокарда относят: гиповолемию, гипоксию (наиболее часто), гипотермию, ацидоз, массивную ТЭЛА, тампонаду сердца, гиперкалиемию, передозировку 
лекарственных средств, обладающих кардиодепрессивным действием (трициклические антидепрессанты и др.), а также ятрогенные осложнения, такие как напряженный пневмоторакс.

Лечение
1) Основные реанимационные мероприятия - ИВЛ, непрямой массаж сердца.
2) Адреналин 1 мг в/в струйно каждые 3 - 5 минут.
3) Атропин 1 мг в/в струйно.
4) Допамин в дозе 5 - 20 мкг/кг мин (разводится 200 мг препарата на 400 мл физиологического раствора).
5) Электрокардиостимуляция.
6) Бикарбонат натрия в/в 2-4 г (50-100 мл 4% раствора), повторяя введение 2 г каждые 10 мин. Показано при гиперкалиемии, метаболическом ацидозе, передозировке трициклических 
антидепрессантов; затянувшейся остановке кровообращения >2 мин); при длительной остановке кровообращения и отсутствии адекватной вентиляции легких. ]]
 

Bogach

Активный
558
27
в imGUI есть ограничение символов в одном окне или как?) ввел очень много информации и окно не выводит все до конца. Можно ли исправить как то?

К примеру :D ->

Код:
slreanimation = u8[[Сердечно-легочная реанимация - это комплекс мероприятий направленных
на оживление организма в случае остановки кровообращения и/или дыхания.

Наиболее частыми первичными причинами остановки кровообращения служат фибрилляция желудочков, гемодинамически неэффективная желудочковая тахикардия и, реже, электромеханическая
диссоциация и асистолия. Первичная остановка дыхания также может вызывать остановку кровообращения, но она крайне редко диагностируется на догоспитальном этапе, так как к
моменту оказания помощи чаще всего уже регистрируется асистолия или фибрилляция желудочков.

Вторичные причины - это постконверсионные ритмы, возникающие после попыток восстановления сердечной деятельности.
Сердечно-легочная реанимация состоит из двух совершенно независимых, но взаимодополняющих этапов оказания помощи:
это основные и специализированные реанимационные мероприятия.

Основные реанимационные мероприятия проводятся вне зависимости от причины остановки кровообращения и включают в себя поддержание кровообращения(непрямой массаж сердца), а также
обеспечение проходимости дыхательных путей и достаточного уровня вентиляции легких (проведение ИВЛ).
Вероятность сохранения жизни пациента в случае остановки кровообращения обратно пропорциональна периоду времени, от остановки кровообращения до времени начала реанимационных
мероприятий. Проведение основных реанимационных мероприятий показано во всех случаях остановки кровообращения.

Специализированные реанимационные мероприятия требуют использования лекарственных средств и реанимационного оборудования, но не исключают, а лишь дополняют основные.

ТАКТИКА ПРИ ФИБРИЛЛЯЦИИ ЖЕЛУДОЧКОВ И ГЕМОДИНАМИЧЕСКИ НЕЭФФЕКТИВНОЙ ЖЕЛУДОЧКОВОЙ ТАХИКАРДИИ.
1) Основным способом лечения фибрилляции желудочков является электрическая дефибрилляция. Начальная энергия разряда составляет 200 - 360 Дж . При отсутствии электрического
дефибриллятора допустимо выполнять прекордиальный удар.
2) При сохранении фибрилляции желудочков повторяют электрический разряд.
3) При неэффективности - возобновляют основные реанимационные мероприятия, производят интубацию трахеи, налаживают венозный доступ.
4) Адреналин 1 мг в/в струйно каждые 3 - 5 мин.
5) Возрастающие дозы адреналина 1-3-5 мг в/в каждые 3 минуты, или применение промежуточных доз 2-5 мг в/в каждые 3-5 минут.
6) Если в течение 1 минуты не восстановлен ритм, то выполняется электрическая дефибрилляция разрядом 360 Дж.
7) При продолжающейся фибрилляции желудочков используют антиаритмические препараты:
Лидокаин 1,5 мг/кг в/в струйно повторяют через 3-5 мин. В случае восстановления кровообращения налаживают непрерывную инфузию лидокаина со скоростью 2-4 мг/мин.
Сульфат магния 1-2 г в/в в течение 1-2 мин.
Предпочтение сульфату магния можно отдать в случае заведомой гипомагниемии, желудочковой тахикардии типа torsade de pointes («пируэт»).
8) Бикарбонат натрия вводят в/в 1 мэкв/кг, повторяя введение 0,5 мэкв/кг каждые 10 мин при сохраняющейся в течение продолжительного времени остановки кровообращения.
Рекомендуется чередовать введение лекарственных препаратов с разрядами дефибриллятора по схеме: “лекарство - разряд - лекарство - разряд”.

ТАКТИКА ПРИ ГЕМОДИНАМИЧЕСКИ НЕЭФФЕКТИВНОЙ ЭЛЕКТРИЧЕСКОЙ АКТИВНОСТИ МИОКАРДА.
Гемодинамически неэффективная электрическая активность миокарда - это условный термин, объединяющий разнородную группу нарушений ритма сердца: электромеханическую диссоциацию,
желудочковые замещающие ритмы, медленный идиовентрикулярный ритм, брадиаритмии. Они характеризуются неэффективным кровообращением при регистрируемой на ЭКГ электрической
активности миокарда, отличной от желудочковой тахикардии и фибрилляции желудочков. Практические подходы к лечению позволяют рассматривать эти нарушения ритма в одном разделе.

К сожалению, прогноз при этом виде нарушений ритма плохой, если не устранена причина, вызвавшая остановку кровообращения. К причинам, вызывающим гемодинамически неэффективную
электрическую активность миокарда относят: гиповолемию, гипоксию (наиболее часто), гипотермию, ацидоз, массивную ТЭЛА, тампонаду сердца, гиперкалиемию, передозировку
лекарственных средств, обладающих кардиодепрессивным действием (трициклические антидепрессанты и др.), а также ятрогенные осложнения, такие как напряженный пневмоторакс.

Лечение
1) Основные реанимационные мероприятия - ИВЛ, непрямой массаж сердца.
2) Адреналин 1 мг в/в струйно каждые 3 - 5 минут.
3) Атропин 1 мг в/в струйно.
4) Допамин в дозе 5 - 20 мкг/кг мин (разводится 200 мг препарата на 400 мл физиологического раствора).
5) Электрокардиостимуляция.
6) Бикарбонат натрия в/в 2-4 г (50-100 мл 4% раствора), повторяя введение 2 г каждые 10 мин. Показано при гиперкалиемии, метаболическом ацидозе, передозировке трициклических
антидепрессантов; затянувшейся остановке кровообращения >2 мин); при длительной остановке кровообращения и отсутствии адекватной вентиляции легких. ]]
Нужно переносить на следующую строку, то что не влазит.
 

Jason2222

Известный
180
3
Нужно переносить на следующую строку, то что не влазит.
Дак я ж переношу. Просто после ТАКТИКА ПРИ ФИБРИЛЛЯЦИИ ЖЕЛУДОЧКОВ И ГЕМОДИНАМИЧЕСКИ НЕЭФФЕКТИВНОЙ ЖЕЛУДОЧКОВОЙ ТАХИКАРДИИ все прерывается и ничего нет.
 

BND / PLP

Новичок
84
4
напишите диалог используя то что фип написал в полезных сниппетах и функциях, а то когда я делаю у меня самп виснет