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

percheklii

Известный
725
266
Почему не получается получить айди 3д текста? Пробовал разный текст, не с каким не работает. Юзал этот скрипт -

Lua:
local sampev = require 'lib.samp.events'

function sampev.OnCreate3DText(id, color, position, distance, testLOS, attachedPlayerdId, attachedVehicleId, text)
    print('3д текст с id '..id..' находится на кордах: '..position.x..' '..position.y..' '..position.z)
end
если ты накалякал этот код стоя возле 3д текста, и потом перезагрузил скрипты, это так не работает, этот хук срабатывает когда появляется 3д текст
 
  • Нравится
Реакции: vuyy и MLycoris

vuyy

Активный
129
54
если ты накалякал этот код стоя возле 3д текста, и потом перезагрузил скрипты, это так не работает, этот хук срабатывает когда появляется 3д текст
да нет, я далеко от 3д текста уезжал приезжал обратно он появляется но айди я так и не получил
Пробовал даже со сборки переустанавливал мунлодер зачем то полностью нечего не помогает
 
  • Грустно
  • Клоун
Реакции: Air_Official и percheklii

Dmitriy Makarov

25.05.2021
Проверенный
2,478
1,113
да нет, я далеко от 3д текста уезжал приезжал обратно он появляется но айди я так и не получил
Пробовал даже со сборки переустанавливал мунлодер зачем то полностью нечего не помогает
1708971977889.png

on, а не On.
 
  • Влюблен
Реакции: vuyy

Randall666

Новичок
4
0
как переписать для спидометра тринити?
1708976216204.png

фулл код
function sampev.onShowTextDraw(id, data)
--[[print("ID: "..id)
for k,v in pairs(data) do
if type(v) == "table" then
for s,t in pairs(v) do
print(k..": "..s, t)
end
else
print(k,v)
end
end]]
if id <= 4 and id >= 6 then return false end -- скрытие текстдрава сообщения рядом с лого
local textdraws_table = {
data.modelId == 1650 and tostring(data.position.x):find('133%.34794616699') and tostring(data.position.y):find('404%.06661987305'), -- иконка канистры
tostring(data.position.x):find('143%.29100036621') and tostring(data.position.y):find('413%.05926513672'), -- счетчик бензина
tostring(data.position.x):find('160%.96775817871') and tostring(data.position.y):find('413%.05926513672'), -- счетчик HP
tostring(data.position.x):find('158%.12118530273') and tostring(data.position.y):find('384%.15548706055'), -- счетчик KM/H
data.text == "KM/H", -- надпись KM/H
data.modelId == 19804 and tostring(data.position.x):find('199%.43836975098') and tostring(data.position.y):find('404%.59994506836'), -- иконка замка
tostring(data.position.x):find('158%.30000305176') and tostring(data.position.y):find('410%.23327636719'), -- юзлесс полоса 1
tostring(data.position.x):find('150%.30000305176') and tostring(data.position.y):find('421%.43322753906'), -- юзлесс полоса 2
tostring(data.position.x):find('157%.30000305176') and tostring(data.position.y):find('409%.23327636719'), -- юзлесс полоса 3
tostring(data.position.x):find('149%.30000305176') and tostring(data.position.y):find('422%.43322753906'), -- юзлесс полоса 4
tostring(data.position.x):find('155%.30000305176') and tostring(data.position.y):find('401%.43322753906'), -- юзлесс полоса 5
data.position.x == 280 and data.position.y == 420 and data.modelId == 2709, -- подсказка клавиши для двигателя 1
tostring(data.position.x):find('361%.6875') and tostring(data.position.y):find('421.11080932617'), -- подсказка клавиши для двигателя 2
data.text:find("2_/_ALT"), -- подсказка клавиши для двигателя 3
tostring(data.position.x):find('356%.9375') and tostring(data.position.y):find('423%.72216796875'), -- подсказка клавиши для двигателя 4
}
for k,v in pairs(textdraws_table) do
if v then
if k == 2 then car.fuel = data.text:match('(%d+)')
elseif k == 3 then car.health = data.text:match('(%d+)')
elseif k == 4 then car.speed = data.text:match('(%d+)')
elseif k == 5 then engineID = id car.engine = false
elseif k == 6 then lockID = id car.lock = true
end
if mainIni.config.s_speed then
return false
end
end
end
end
function sampev.onTextDrawHide(id)
if id == engineID then car.engine = false end
if id == lockID then car.lock = false end
end
 

7 СМЕРТНЫХ ГРЕХОВ

Известный
515
159
Доброго времени суток.
Вот такая вот проблема:
232690
если делаю так то нету летающих иконок

Но если сделать вот так:
232691
то уже +- то что я хочу


Но есть одна небольшая проблемка сами иконки где то за границами меню рисуются, а показываются уже в самом меню
Видно когда перемещаю меню по экрану. Сами иконки где то смещаются.

Так вот мб кто то знает как пофиксить данную проблему что бы иконки коректно отображались влевом чайлде и нигде помимо него

Эффект был взят на основе с темы - https://www.blast.hk/threads/198698/
Актуально 😒
 

P U L V I L I Z A T O R

Участник
84
29
Добрый вечер.
Подскажите, пожалуйста, как пользоваться регулярками в диалоговом окне(диалог_стайл_мсджбокс)
Например, есть текст:
Номер аккаунта: 55555665
Время авторизации на сервере: 07.07.07.07
"Взять" у меня получается только первую строчку, а вот как "взять" со второй строки я не понимаю.
Объясните, пожалуйста
Пробуй:
local text = "your shitty text"
local number = text:match("^.*Номер аккаунта: (%d+)")
local a, b, c, d = text:match("^.*Время авторизации на сервере: (%d+).(%d+).(%d+).(%d+)")

Тексты из диалогов могут лететь в ебанутом виде с кучей пробелов и переносов строки, поэтому надо использовать "^.*" в регулярке, чтобы сказать ей "эй, залупа, бери только тот текст, который указан после "^.*", а то что до него не бери, скотина."
 
Последнее редактирование:
  • Нравится
Реакции: kultizdat.

XRLM

Известный
2,541
861
Пробуй:
local text = "your shitty text"
local number = text:match("^Номер аккаунта: (%d+)")
local a, b, c, d = text:match("^Время авторизации на сервере: (%d+).(%d+).(%d+).(%d+)")

Тексты из диалогов могут лететь в ебанутом виде с кучей пробелов и переносов строки, поэтому надо использовать "^" в регулярке, чтобы сказать ей "эй, залупа, бери только тот текст, который указан после "^", а то что до него не бери, скотина."
^ означает начало строки, $ - конец строки, \t - табуляция, \n - перенос строки.
 

GusiColor

Новичок
4
0
Короче, немного изменю вопрос
У меня в коде комбо не сразу меняется, тип если при запуске значение первое в мимгуи, оно и будет использоваться, даже если поменять на другое значение в комбо.
Только если перезагрузить и будет сохранение в кфг.
(Мне нужно что бы если поменять значение в комбо и потом сразу же оно изменялось, в игре)
Lua:
local imgui = require 'mimgui'
local inicfg = require 'inicfg'
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local WinState = imgui.new.bool()
local ffi = require("ffi")
local str, sizeof = ffi.string, ffi.sizeof
local ini = inicfg.load({
    main =
    {
    combotest = 0,
    combotest2 = 0,
    input = 0,
    inputt = 0,
    inputtt = 0,
    }}, 'ldcfg.ini')
if not doesFileExist('moonloader/config/ldcfg.ini') then inicfg.save(ini, 'ldcfg.ini') end
local inputField = imgui.new.char[256](u8(ini.main.input)) -- фи
local nasral = ffi.string(inputField)
local inputField2 = imgui.new.char[256](u8(ini.main.inputt)) -- орга
local nasral2 = ffi.string(inputField2)
local inputField3 = imgui.new.char[256](u8(ini.main.inputtt))-- должность
local nasral3 = ffi.string(inputField3)
local ComboTest = imgui.new.int(tonumber(ini.main.combotest))
local item_list = {u8"6:00", u8"6:05", u8"6:10", u8"6:15", u8"6:20", u8"6:25", u8"6:30", u8"6:35", u8"6:40", u8"6:45", u8"6:50", u8"6:55", u8"7:00", u8"7:05", u8"7:10", u8"7:15", u8"7:20", u8"7:25", u8"7:30", u8"7:35", u8"7:40", u8"7:45", u8"7:50", u8"7:55", u8"8:00", u8"8:05", u8"8:10", u8"8:15", u8"8:20", u8"8:25", u8"8:30", u8"8:35", u8"8:40", u8"8:45", u8"8:50", u8"8:55", u8"9:00", u8"9:05", u8"9:10", u8"9:15", u8"9:20", u8"9:25", u8"9:30", u8"9:35", u8"9:40", u8"9:45", u8"9:50", u8"9:55", u8"10:00", u8"10:05", u8"10:10", u8"10:15", u8"10:20", u8"10:25", u8"10:30", u8"10:35", u8"10:40", u8"10:45", u8"10:50", u8"10:55", u8"11:00", u8"11:05", u8"11:10", u8"11:15", u8"11:20", u8"11:25", u8"11:30", u8"11:35", u8"11:40", u8"11:45", u8"11:50", u8"11:55", u8"12:00", u8"12:05", u8"12:10", u8"12:15", u8"12:20", u8"12:25", u8"12:30", u8"12:35", u8"12:40", u8"12:45", u8"12:50", u8"12:55", u8"13:00", u8"13:05", u8"13:10", u8"13:15", u8"13:20", u8"13:25", u8"13:30", u8"13:35", u8"13:40", u8"13:45", u8"13:50", u8"13:55", u8"14:00", u8"14:05", u8"14:10", u8"14:15", u8"14:20", u8"14:25", u8"14:30", u8"14:35", u8"14:40", u8"14:45", u8"14:50", u8"14:55", u8"15:00", u8"15:05", u8"15:10", u8"15:15", u8"15:20", u8"15:25", u8"15:30", u8"15:35", u8"15:40", u8"15:45", u8"15:50", u8"15:55", u8"16:00", u8"16:05", u8"16:10", u8"16:15", u8"16:20", u8"16:25", u8"16:30", u8"16:35", u8"16:40", u8"16:45", u8"16:50", u8"16:55", u8"17:00", u8"17:05", u8"17:10", u8"17:15", u8"17:20", u8"17:25", u8"17:30", u8"17:35", u8"17:40", u8"17:45", u8"17:50", u8"17:55", u8"18:00", u8"18:05", u8"18:10", u8"18:15", u8"18:20", u8"18:25", u8"18:30", u8"18:35", u8"18:40", u8"18:45", u8"18:50", u8"18:55", u8"19:00", u8"19:05", u8"19:10", u8"19:15", u8"19:20", u8"19:25", u8"19:30", u8"19:35", u8"19:40", u8"19:45", u8"19:50", u8"19:55", u8"20:00", u8"20:05", u8"20:10", u8"20:15", u8"20:20", u8"20:25", u8"20:30", u8"20:35", u8"20:40", u8"20:45", u8"20:50", u8"20:55", u8"21:00", u8"21:05", u8"21:10", u8"21:15", u8"21:20", u8"21:25", u8"21:30", u8"21:35", u8"21:40", u8"21:45", u8"21:50", u8"21:55", u8"22:00", u8"22:05", u8"22:10", u8"22:15", u8"22:20", u8"22:25", u8"22:30", u8"22:35", u8"22:40", u8"22:45", u8"22:50", u8"22:55", u8"23:00", u8"23:05", u8"23:10", u8"23:15", u8"23:20", u8"23:25", u8"23:30", u8"23:35", u8"23:40", u8"23:45", u8"23:50", u8"23:55", u8"0:00", u8"0:05", u8"0:10", u8"0:15", u8"0:20", u8"0:25", u8"0:30", u8"0:35", u8"0:40", u8"0:45", u8"0:50", u8"0:55", u8"1:00", u8"1:05", u8"1:10", u8"1:15", u8"1:20", u8"1:25", u8"1:30", u8"1:35", u8"1:40", u8"1:45", u8"1:50", u8"1:55", u8"2:00", u8"2:05", u8"2:10", u8"2:15", u8"2:20", u8"2:25", u8"2:30", u8"2:35", u8"2:40", u8"2:45", u8"2:50", u8"2:55", u8"3:00"} -- создаём таблицу с содержимым списка
local ImItems = imgui.new['const char*'][#item_list](item_list)
local ComboTest2 = imgui.new.int(tonumber(ini.main.combotest2)) -- создаём буфер для комбо
local item_list2 = {u8'АО', u8'СМИ', u8'БА', u8'МВД', u8'Армия', u8'МЧС', u8'ТСР'} -- создаём таблицу с содержимым списка
local ImItems2 = imgui.new['const char*'][#item_list2](item_list2)
local seks = string.format("[%s] - [all] Гос.Волна свободна на %s?", u8:decode(item_list2[ComboTest2[0] + 1]),  item_list[ComboTest[0] + 1])
local seks2 = string.format("/d [%s] - [all] Гос.Волна свободна на %s? *повторяя*", u8:decode(item_list2[ComboTest2[0] + 1]),  item_list[ComboTest[0] + 1])
local seks3 = string.format("/d [%s] - [all] Не услышав ответа, занял Гос.Волну на %s!", u8:decode(item_list2[ComboTest2[0] + 1]),  item_list[ComboTest[0] + 1])
local seks4 = string.format("/d [%s] - [all] Напоминаю, что занял Гос.Волну на %s!", u8:decode(item_list2[ComboTest2[0] + 1]),  item_list[ComboTest[0] + 1])
local seks5 = string.format("/d [%s] - [all] Занимаю Гос.Волну!", u8:decode(item_list2[ComboTest2[0] + 1]))
local seks6 = string.format("/gov [%s] Доброго времени суток, уважаемые жители области.", u8:decode(item_list2[ComboTest2[0] + 1]))
local seks7 = string.format("/gov [%s] Сейчас будет проходить собеседование в %s", u8:decode(item_list2[ComboTest2[0] + 1]), u8:decode(nasral2))
local seks8 = string.format("/gov [%s] Вас ожидает: Приятный состав, хорошие зарплаты и т.д.", u8:decode(item_list2[ComboTest2[0] + 1]))
local seks9 = string.format("/gov [%s] Собеседование в %s - окончено", u8:decode(item_list2[ComboTest2[0] + 1]), u8:decode(nasral2))
local seks10 = string.format("/gov [%s] С уважением, %s - %s", u8:decode(item_list2[ComboTest2[0] + 1]), u8:decode(nasral3), u8:decode(nasral))
local seks11 = string.format("/d [%s] - [all] Освобождаю Гос.Волну!", u8:decode(item_list2[ComboTest2[0] + 1]))
local d1 = string.format("/d [%s] - [all] Рация упала...", u8:decode(item_list2[ComboTest2[0] + 1]))
local gov = string.format("/gov [%s] Тех.Проблемы", u8:decode(item_list2[ComboTest2[0] + 1]))
local d2 = string.format("/d [%s] - [all] Тех.Проблемы", u8:decode(item_list2[ComboTest2[0] + 1]))


imgui.OnFrame(function() return WinState[0] end, function(player)
    imgui.SetNextWindowPos(imgui.ImVec2(500,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(350, 350), imgui.Cond.Always)
    imgui.Begin('LeaderTools', WinState, imgui.WindowFlags.NoResize)
    if imgui.BeginTabBar('Tabs') then
        if imgui.BeginTabItem(u8'Гос.Волна') then
  if imgui.Combo(u8'Гос.Волна',ComboTest,ImItems,#item_list) then
    ini.main.combotest = ComboTest[0]
    inicfg.save(ini, 'ldcfg.ini')
end
    imgui.Separator()
          imgui.Separator()
                imgui.SetCursorPosY(83)
          if imgui.Button(u8"Свободна ли?", imgui.ImVec2(80, 75)) then
            lua_thread.create(function()
                sampSendChat(seks)
            end)
          end
(кинул кусок кода, где применяются сразу все комбо из моего кода)
 

XRLM

Известный
2,541
861
Короче, немного изменю вопрос
У меня в коде комбо не сразу меняется, тип если при запуске значение первое в мимгуи, оно и будет использоваться, даже если поменять на другое значение в комбо.
Только если перезагрузить и будет сохранение в кфг.
(Мне нужно что бы если поменять значение в комбо и потом сразу же оно изменялось, в игре)
Lua:
local imgui = require 'mimgui'
local inicfg = require 'inicfg'
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local WinState = imgui.new.bool()
local ffi = require("ffi")
local str, sizeof = ffi.string, ffi.sizeof
local ini = inicfg.load({
    main =
    {
    combotest = 0,
    combotest2 = 0,
    input = 0,
    inputt = 0,
    inputtt = 0,
    }}, 'ldcfg.ini')
if not doesFileExist('moonloader/config/ldcfg.ini') then inicfg.save(ini, 'ldcfg.ini') end
local inputField = imgui.new.char[256](u8(ini.main.input)) -- фи
local nasral = ffi.string(inputField)
local inputField2 = imgui.new.char[256](u8(ini.main.inputt)) -- орга
local nasral2 = ffi.string(inputField2)
local inputField3 = imgui.new.char[256](u8(ini.main.inputtt))-- должность
local nasral3 = ffi.string(inputField3)
local ComboTest = imgui.new.int(tonumber(ini.main.combotest))
local item_list = {u8"6:00", u8"6:05", u8"6:10", u8"6:15", u8"6:20", u8"6:25", u8"6:30", u8"6:35", u8"6:40", u8"6:45", u8"6:50", u8"6:55", u8"7:00", u8"7:05", u8"7:10", u8"7:15", u8"7:20", u8"7:25", u8"7:30", u8"7:35", u8"7:40", u8"7:45", u8"7:50", u8"7:55", u8"8:00", u8"8:05", u8"8:10", u8"8:15", u8"8:20", u8"8:25", u8"8:30", u8"8:35", u8"8:40", u8"8:45", u8"8:50", u8"8:55", u8"9:00", u8"9:05", u8"9:10", u8"9:15", u8"9:20", u8"9:25", u8"9:30", u8"9:35", u8"9:40", u8"9:45", u8"9:50", u8"9:55", u8"10:00", u8"10:05", u8"10:10", u8"10:15", u8"10:20", u8"10:25", u8"10:30", u8"10:35", u8"10:40", u8"10:45", u8"10:50", u8"10:55", u8"11:00", u8"11:05", u8"11:10", u8"11:15", u8"11:20", u8"11:25", u8"11:30", u8"11:35", u8"11:40", u8"11:45", u8"11:50", u8"11:55", u8"12:00", u8"12:05", u8"12:10", u8"12:15", u8"12:20", u8"12:25", u8"12:30", u8"12:35", u8"12:40", u8"12:45", u8"12:50", u8"12:55", u8"13:00", u8"13:05", u8"13:10", u8"13:15", u8"13:20", u8"13:25", u8"13:30", u8"13:35", u8"13:40", u8"13:45", u8"13:50", u8"13:55", u8"14:00", u8"14:05", u8"14:10", u8"14:15", u8"14:20", u8"14:25", u8"14:30", u8"14:35", u8"14:40", u8"14:45", u8"14:50", u8"14:55", u8"15:00", u8"15:05", u8"15:10", u8"15:15", u8"15:20", u8"15:25", u8"15:30", u8"15:35", u8"15:40", u8"15:45", u8"15:50", u8"15:55", u8"16:00", u8"16:05", u8"16:10", u8"16:15", u8"16:20", u8"16:25", u8"16:30", u8"16:35", u8"16:40", u8"16:45", u8"16:50", u8"16:55", u8"17:00", u8"17:05", u8"17:10", u8"17:15", u8"17:20", u8"17:25", u8"17:30", u8"17:35", u8"17:40", u8"17:45", u8"17:50", u8"17:55", u8"18:00", u8"18:05", u8"18:10", u8"18:15", u8"18:20", u8"18:25", u8"18:30", u8"18:35", u8"18:40", u8"18:45", u8"18:50", u8"18:55", u8"19:00", u8"19:05", u8"19:10", u8"19:15", u8"19:20", u8"19:25", u8"19:30", u8"19:35", u8"19:40", u8"19:45", u8"19:50", u8"19:55", u8"20:00", u8"20:05", u8"20:10", u8"20:15", u8"20:20", u8"20:25", u8"20:30", u8"20:35", u8"20:40", u8"20:45", u8"20:50", u8"20:55", u8"21:00", u8"21:05", u8"21:10", u8"21:15", u8"21:20", u8"21:25", u8"21:30", u8"21:35", u8"21:40", u8"21:45", u8"21:50", u8"21:55", u8"22:00", u8"22:05", u8"22:10", u8"22:15", u8"22:20", u8"22:25", u8"22:30", u8"22:35", u8"22:40", u8"22:45", u8"22:50", u8"22:55", u8"23:00", u8"23:05", u8"23:10", u8"23:15", u8"23:20", u8"23:25", u8"23:30", u8"23:35", u8"23:40", u8"23:45", u8"23:50", u8"23:55", u8"0:00", u8"0:05", u8"0:10", u8"0:15", u8"0:20", u8"0:25", u8"0:30", u8"0:35", u8"0:40", u8"0:45", u8"0:50", u8"0:55", u8"1:00", u8"1:05", u8"1:10", u8"1:15", u8"1:20", u8"1:25", u8"1:30", u8"1:35", u8"1:40", u8"1:45", u8"1:50", u8"1:55", u8"2:00", u8"2:05", u8"2:10", u8"2:15", u8"2:20", u8"2:25", u8"2:30", u8"2:35", u8"2:40", u8"2:45", u8"2:50", u8"2:55", u8"3:00"} -- создаём таблицу с содержимым списка
local ImItems = imgui.new['const char*'][#item_list](item_list)
local ComboTest2 = imgui.new.int(tonumber(ini.main.combotest2)) -- создаём буфер для комбо
local item_list2 = {u8'АО', u8'СМИ', u8'БА', u8'МВД', u8'Армия', u8'МЧС', u8'ТСР'} -- создаём таблицу с содержимым списка
local ImItems2 = imgui.new['const char*'][#item_list2](item_list2)
local seks = string.format("[%s] - [all] Гос.Волна свободна на %s?", u8:decode(item_list2[ComboTest2[0] + 1]),  item_list[ComboTest[0] + 1])
local seks2 = string.format("/d [%s] - [all] Гос.Волна свободна на %s? *повторяя*", u8:decode(item_list2[ComboTest2[0] + 1]),  item_list[ComboTest[0] + 1])
local seks3 = string.format("/d [%s] - [all] Не услышав ответа, занял Гос.Волну на %s!", u8:decode(item_list2[ComboTest2[0] + 1]),  item_list[ComboTest[0] + 1])
local seks4 = string.format("/d [%s] - [all] Напоминаю, что занял Гос.Волну на %s!", u8:decode(item_list2[ComboTest2[0] + 1]),  item_list[ComboTest[0] + 1])
local seks5 = string.format("/d [%s] - [all] Занимаю Гос.Волну!", u8:decode(item_list2[ComboTest2[0] + 1]))
local seks6 = string.format("/gov [%s] Доброго времени суток, уважаемые жители области.", u8:decode(item_list2[ComboTest2[0] + 1]))
local seks7 = string.format("/gov [%s] Сейчас будет проходить собеседование в %s", u8:decode(item_list2[ComboTest2[0] + 1]), u8:decode(nasral2))
local seks8 = string.format("/gov [%s] Вас ожидает: Приятный состав, хорошие зарплаты и т.д.", u8:decode(item_list2[ComboTest2[0] + 1]))
local seks9 = string.format("/gov [%s] Собеседование в %s - окончено", u8:decode(item_list2[ComboTest2[0] + 1]), u8:decode(nasral2))
local seks10 = string.format("/gov [%s] С уважением, %s - %s", u8:decode(item_list2[ComboTest2[0] + 1]), u8:decode(nasral3), u8:decode(nasral))
local seks11 = string.format("/d [%s] - [all] Освобождаю Гос.Волну!", u8:decode(item_list2[ComboTest2[0] + 1]))
local d1 = string.format("/d [%s] - [all] Рация упала...", u8:decode(item_list2[ComboTest2[0] + 1]))
local gov = string.format("/gov [%s] Тех.Проблемы", u8:decode(item_list2[ComboTest2[0] + 1]))
local d2 = string.format("/d [%s] - [all] Тех.Проблемы", u8:decode(item_list2[ComboTest2[0] + 1]))


imgui.OnFrame(function() return WinState[0] end, function(player)
    imgui.SetNextWindowPos(imgui.ImVec2(500,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(350, 350), imgui.Cond.Always)
    imgui.Begin('LeaderTools', WinState, imgui.WindowFlags.NoResize)
    if imgui.BeginTabBar('Tabs') then
        if imgui.BeginTabItem(u8'Гос.Волна') then
  if imgui.Combo(u8'Гос.Волна',ComboTest,ImItems,#item_list) then
    ini.main.combotest = ComboTest[0]
    inicfg.save(ini, 'ldcfg.ini')
end
    imgui.Separator()
          imgui.Separator()
                imgui.SetCursorPosY(83)
          if imgui.Button(u8"Свободна ли?", imgui.ImVec2(80, 75)) then
            lua_thread.create(function()
                sampSendChat(seks)
            end)
          end
(кинул кусок кода, где применяются сразу все комбо из моего кода)
ну так меняй значение ImItems при изменении списка😱😱😱
 
  • Клоун
Реакции: trefa и Air_Official

Require

Участник
49
1
почему эта фигня не удаляет рващика?
Lua:
function removeSampPlayer(pid)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteInt16(bs, pid)
    raknetEmulRpcReceiveBitStream(163, bs) -- 163: RPC_ScrWorldPlayerRemove
    raknetDeleteBitStream(bs)
end

function sampev.onPlayerSync(id, data)
    if checkboxone[0] then
        local x, y, z = getCharCoordinates(PLAYER_PED)
        if x - data.position.x > -1.5 and x - data.position.x < 1.5 then
            if (data.moveSpeed.x >= 1.5 or data.moveSpeed.x <= -1.5) or (data.moveSpeed.y >= 1.5 or data.moveSpeed.y <= -1.5) or (data.moveSpeed.z >= 0.5 or data.moveSpeed.z <= -0.5) then
                if not player_id[id] then
                    player_id[id] = true
                    target_id = id
                    removeSampPlayer(id)
                end
            end
        end
    end
end
 

kultizdat.

Известный
34
1
Для чего нужен в onShowDialog
Код:
for line in text:gmatch('[^\r\n]+') do

Если можно искать напрямую в onShowDialog по параметру text?
 
  • Эм
  • Bug
Реакции: sVor и recxvery

papercut

Участник
90
13
Для чего нужен в onShowDialog
Код:
for line in text:gmatch('[^\r\n]+') do

Если можно искать напрямую в onShowDialog по параметру text?
Это цикл, в котором на каждой итерации рассматривается новая строка. Полезно для работы с логами, инвентарем и тд, где неизвестно количество и порядок строк строк заранее, но известно что в них может оказаться
То есть на каждой итерации ты уже имеешь дело с одной строкой.
Если у тебя диалог, например, со статистикой, где каждая строка и так уникальна, то этого делать не надо, даже вредно.
 
  • Нравится
Реакции: kultizdat.

kjtktkj

Новичок
1
0
как реализовать регулярное выражение по отношению к title?

~решение: if tostring() then
НО
реагирует на каждый диалог 0_о

но как заиметь переменную со значением? сейчас возвращает nil
Lua:
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    if tostring(title:find('%{BFBBBA%}Игровое (%.+)')) then
        local zxc = title:match('%{BFBBBA%}Игровое (%.+)')
        sampAddChatMessage(zxc, -1)
    end
end
 
Последнее редактирование:

kvladiss

Новичок
1
0
Вообщем я вставляю в инпут например 123, оно мне в конфиг записывает 123, а в самом инпуте это выглядит в таком виде }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
не могу понять почему вот мой код

Lua:
require('lib.moonloader')
local imgui = require('mimgui')
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local ev = require ("lib.samp.events")
local effil = require("effil")
local inicfg = require('inicfg')
local ffi = require('ffi')

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)
local mainIni = inicfg.load({
    main = {
    token = '',
    userId = ''
    }
}, '123/123.ini')
if not doesFileExist('moonloader/config/123/123.ini') then
    inicfg.save(mainIni,'autopilot/123.ini')
end
local tkn = new.char[256](mainIni.main.token)
local uid = new.char[256](mainIni.main.userId)


local newFrame = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(600, 400), imgui.Cond.FirstUseEver)
        imgui.Begin("Menu", renderWindow, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoResize)

        imgui.InputText(u8'Токен бота', tkn, sizeof(tkn))
        mainIni.main.token= u8:decode(ffi.string(tkn))

        imgui.InputText(u8'UserId', uid,sizeof(tkn))
        mainIni.main.userId= u8:decode(ffi.string(uid))
       
        if imgui.Button(u8'Сохранить настройки бота') then
            inicfg.save(mainIni, '123/123.ini')
            sampAddChatMessage('Настройки сохранены', -1)
            sampAddChatMessage(mainIni.main.userId, -1)
        end
        imgui.End()
    end
)
 
  • Грустно
Реакции: recxvery