Lua SnailMatic | Самый функциональный биндер

Лебiгович

Известный
877
239
Можешь пожалуйста в следующем обновлении сделать так, чтобы можно было забиндить команду активации/деактивации других скриптов и твой биндер распознавал эти команды?
 

GrezeeBal

Известный
Автор темы
Проверенный
1,477
882
Можешь пожалуйста в следующем обновлении сделать так, чтобы можно было забиндить команду активации/деактивации других скриптов и твой биндер распознавал эти команды?
есть такое, читай документацию по отправкам строки
 

Лебiгович

Известный
877
239
И ещё, возможно ли с твоей стороны реализовать автоматическое копирование текста (отправленной команды) после отправки в чат? Например я прописал команду "/fam На капт" и чтобы этот текст автоматически скопировался в буфер обмена
 

GrezeeBal

Известный
Автор темы
Проверенный
1,477
882
И ещё, возможно ли с твоей стороны реализовать автоматическое копирование текста (отправленной команды)? Например я прописал команду "/fam На капт" и чтобы этот текст автоматически скопировался в буфер обмена
есть такое, читай документацию по отправкам строки
я больше не буду отвечать на твои сообщения, пока ты не начнёшь искать ответы самостоятельно
 

Лебiгович

Известный
877
239
есть такое, читай документацию по отправкам строки
ладно, виноват, что то никогда не обращал внимание на такую документацию а в самом биндере не доходил до такой функции

Код:
(error) SnailMatic: Ошибка #3. Возможное решение: смена DNS или установка VPN
Решение: На работоспособность биндера это никак не влияет. Решение указано в самой ошибке. Биндеру что-то блокирует попытку отправить запрос на свой сервер, например антистиллер, кривой DNS провайдера или блокировка хоста биндера со стороны провайдера
можешь в след обновлении добавить, чтобы можно было отключить отправку запроса этого, ибо по кд (почти каждую минуту) флудит ошибка отправки запроса, зависает на секунду, раздражает
 

Strand

Участник
48
27
Привет, есть способ добавить исключения в скрипте при выборе цели? Игнорировать указанные ID. Сколько не смотрел документацию, ничего подобного не видел. У меня просто беда, я работаю в ПД, при отыгровке мегафона у меня идет строка перед отыгровкой траффик стопа @targetset($closestidtocenter$)@, чтобы исходя от этой инфы получать информацию о транспорте. Но когда в машине со мной кто-то сидит, то выбирает его id. Мне нужно от этого как-то избавиться
Только не так, чтобы скрипт не срабатывал, если игрок в моем авто, а чтобы он пропускал этих игроков и продолжал поиск, пока не выберет нужного мне игрока
 

GrezeeBal

Известный
Автор темы
Проверенный
1,477
882
Привет, есть способ добавить исключения в скрипте при выборе цели? Игнорировать указанные ID. Сколько не смотрел документацию, ничего подобного не видел. У меня просто беда, я работаю в ПД, при отыгровке мегафона у меня идет строка перед отыгровкой траффик стопа @targetset($closestidtocenter$)@, чтобы исходя от этой инфы получать информацию о транспорте. Но когда в машине со мной кто-то сидит, то выбирает его id. Мне нужно от этого как-то избавиться
Только не так, чтобы скрипт не срабатывал, если игрок в моем авто, а чтобы он пропускал этих игроков и продолжал поиск, пока не выберет нужного мне игрока
попробуй другие варианты выбора цели. Например через /smtarget $closestdriverid$:

1674596757935.png

1. /smtarget $closestdriverid$ - Отправка в инпутбокс чата(f6)
2. @waitif(not samp_isChatInputActive())@ - эта переменная поставит бинд на паузу, пока открыт чат
- здесь биндер откроет чат, впишет туда /smtarget с идом ближайшего водителя. Если ид правильный - просто нажимаешь Enter. Если нет - исправляешь на правильный. Всё это время бинд будет стоять на паузе, пока ты не отправишь команду

Насчет исключений помочь не могу, можешь у @RTD спросить
 
Последнее редактирование:
  • Нравится
Реакции: Strand

Strand

Участник
48
27
попробуй другие варианты выбора цели. Например через /smtarget $closestdriverid$:

Посмотреть вложение 187174
1. /smtarget $closestdriverid$ - Отправка в инпутбокс чата(f6)
2. @waitif(not samp_isChatInputActive())@ - эта переменная поставит бинд на паузу, пока открыт чат
- здесь биндер откроет чат, впишет туда /smtarget с идом ближайшего водителя. Если ид правильный - просто нажимаешь Enter. Если нет - исправляешь на правильный. Всё это время бинд будет стоять на паузе, пока ты не отправишь команду

Насчет исключений помочь не могу, можешь у @RTD спросить
Кстати, вот то что ты скинул @waitif(not samp_isChatInputActive())@, есть подробный список самповских функций?
 

GrezeeBal

Известный
Автор темы
Проверенный
1,477
882
Кстати, вот то что ты скинул @waitif(not samp_isChatInputActive())@, есть подробный список самповских функций?
в документации к snailmatic api есть набор функций. + если есть сампфункс - его функции тоже должны работать
 
  • Нравится
Реакции: Strand

Strand

Участник
48
27
Планируются-ли обновления биндера в ближайшее время? Если да, то может добавить редактор переменных профиля? Такое же окно как и редактор HUD'а и шпаргалок, но привязанное к одному профилю.
Я использую активацию бинда по тексту в чате используя луа-паттерн
.+/sm.open, чтобы позже активировать бинд /smregvarwn rank Офицер. Но когда биндер крашится, то после перезапуска скрипта в чате не выходит того сообщения, которое появляется при запуске игры, а сам бинд я забываю прожать в таком случае и выходит, что мне приходится откатывать действия на сервере, искать бинд в меню, прожимать его и с самого начала делать отыгрышь.
Добавить функциональную переменную, которая будет выводить линию из шпаргалки что-то по типу @spur(name:numberline/text)@, где name - имя шпаргалки, numberline - номер линии, text - поиск линии по тексту в шпаргалке
Разбивка текста на несколько сообщений. Если сообщение имеет кол-во символов выше разрешенного, то текст делит на несколько частей к ближайшему пробелу, добавляя троеточие в нужных местах и отправляет с задержкой указанной в настройках, а сам бинд, в котором указан слишком длинный текст, будет ждать завершения отправки сообщения полностью и только после этого продолжит свою работу

===================================

Так на этом с предложениями закончил, вопрос по функции @ifandor(?:)@. Если в нее ввести цифровое значение, то скрипт крашит.
Пример:
/r @nickrp($myid$)@ начинаю патруль на @paramcmd(1)@, как @paramcmd(2)@. Доступен.
@ifandor("@paramcmd(3)"=="-1"?:/r В составе юнита @nickrp(@paramcmd(3)), N-@paramcmd(3))@
К сожалению сейчас не могу скинуть мунлог, но последний раз, когда я заглядывал в него, я видел ошибку связанную с форматированием string, луа на что-то жаловалась

И еще вопрос, можно-ли очистить временную переменную? Если можно, то как?
Потому что в том же бинде я устанавливаю переменные, и мне приходится костылем использовать ту схему с -1, но вместо -1 я использую n
Мне это нужно чтобы моя команда в случае чего могла выглядеть не как /smpatrol MARY M-32 n, а как /smpatrol MARY M-32 и /smpatrol CONTROL L-61 52. Чтобы не создавать отдельный бинд при патрулировании с напарником.

Пока что мои назойливые просьбы и вопросы заканчиваются, большую часть биндера уже освоил, осталось научиться создавать свои переменные

UPD:
Как появится возможность скину сюда мунлог и профиль биндера

UPD2:
Перечитав свое сообщение, я заметил, что напиздел в бинде с /smpatrol
В самом начале бинда я устанавливаю временные переменные и далее их использую вместо @paramcmd()@
 
Последнее редактирование:

GrezeeBal

Известный
Автор темы
Проверенный
1,477
882
Планируются-ли обновления биндера в ближайшее время? Если да, то может добавить редактор переменных профиля? Такое же окно как и редактор HUD'а и шпаргалок, но привязанное к одному профилю.
Обнова может в ближайшее время выйти, да. Насчет редактора ничего не понял
Я использую активацию бинда по тексту в чате используя луа-паттерн
.+/sm.open, чтобы позже активировать бинд /smregvarwn rank Офицер. Но когда биндер крашится, то после перезапуска скрипта в чате не выходит того сообщения, которое появляется при запуске игры, а сам бинд я забываю прожать в таком случае и выходит, что мне приходится откатывать действия на сервере, искать бинд в меню, прожимать его и с самого начала делать отыгрышь.
Добавить функциональную переменную, которая будет выводить линию из шпаргалки что-то по типу @spur(name:numberline/text)@, где name - имя шпаргалки, numberline - номер линии, text - поиск линии по тексту в шпаргалке
Разбивка текста на несколько сообщений. Если сообщение имеет кол-во символов выше разрешенного, то текст делит на несколько частей к ближайшему пробелу, добавляя троеточие в нужных местах и отправляет с задержкой указанной в настройках, а сам бинд, в котором указан слишком длинный текст, будет ждать завершения отправки сообщения полностью и только после этого продолжит свою работу
посмотрим, что можно сделать
@ifandor("@paramcmd(3)"=="-1"?:/r В составе юнита @nickrp(@paramcmd(3)), N-@paramcmd(3))@
если значения в условии числовые, то кавычки ставить не нужно @ifandor(@paramcmd(3)==-1?. Насчет крашей - не знаю, но вижу, что у тебя тройная функциональная переменная ( @var(@var(@var)))@ ). Максимум можно делать только две, поэтому записывай нужную информацию в обычные переменные через /smregvarwn и уже используй их, вместо nickrp(@paramcmd(3)), N-@paramcmd(3))@.
И еще вопрос, можно-ли очистить временную переменную? Если можно, то как?
Потому что в том же бинде я устанавливаю переменные, и мне приходится костылем использовать ту схему с -1, но вместо -1 я использую n
Мне это нужно чтобы моя команда в случае чего могла выглядеть не как /smpatrol MARY M-32 n, а как /smpatrol MARY M-32 и /smpatrol CONTROL L-61 52. Чтобы не создавать отдельный бинд при патрулировании с напарником.
тут тоже не особо понял, что ты имеешь в виду. Временные переменные можно обновлять. Если переменная $mary$ существует - повторный /smregvar обновит её на новое указанное значение

/smregvar MARY M-32
$MARY$ => M-32
/smregvar MARY ANAL-41
$MARY$ => ANAL-41

UPD2:
Перечитав свое сообщение, я заметил, что напиздел в бинде с /smpatrol
В самом начале бинда я устанавливаю временные переменные и далее их использую вместо @paramcmd()@
ты пиши конкретней и развёрнутей (и желательно со скринами твоего бинда), что нужно тебе сделать и я тебе напишу готовый вариант бинда
 
Последнее редактирование:

Strand

Участник
48
27
Так, насчет редактора, там скорее даже не переменные, а константы, которые пользователь будет вписывать вручную как, допустим, в шпаргалках, что-то вроде следующего:
rank = Офицер
pd = RCSD
defaultnum = 0
Чтобы далее их использовать в биндере как $rank$, $pd$ и $defaultnum$, т.е. отпадает зависимость регистрировать их каждый сеанс

Теперь про /smpatrol распишу подробнее, у меня идет следующий бинд:
/smregvarwn pmark @paramcmd(1)@
/smregvarwn pid @paramcmd(2)@
/smregvarwn ppartnerid @paramcmd(3)@
/r @nickrp($myid$)@ начинаю патруль на $pmark$, как $pid$. Доступен.
@ifandor("$ppartnerid$"=="n"?:/r В составе юнита @nickrp($ppartnerid$), N-$ppartnerid$)@

Когда я пишу /smpatrol MARY M-32 n у меня идет следующий текст:
/r William Adkins начинаю патруль на MARY, как M-32. Доступен.
При /smpatrol CONTROL L-57 7:
/r William Adkins начинаю патруль на CONTROL, как L-57. Доступен.
/r В составе юнита Mark Wilson.
Но мне нужно избавиться от косяка связанного с третьим аргументом в команде. Сменив строку в бинде на @ifandor("$ppartnerid$"==""?:/r В составе юнита @nickrp($ppartnerid$), N-$ppartnerid$)@ (т.е. удалить символ n). Чтобы если я ввел /smpatrol MARY M-32 у меня отыгралось как:
/r William Adkins начинаю патруль на MARY, как M-32. Доступен.
Но происходит так, что если я активирую бинд без третьего аргумента первый раз за сессию, то на месте $ppartnerid$ выйдет #ppartnerid#, т.е. нельзя зарегистрировать пустую переменную, а если я введу /smpatrol CONTROL L-57 7 и после снова активирую бинд без третьего аргумента, то $ppartnerid$ так и останется со значением 7, а значит у меня отыграется то, что я патрулирую с напарником и в том и в том случае. Поэтому мне нужно как-то заставить $ppartnerid$ быть nil в том случае, если в команде будет отсутствовать третий аргумент
 

GrezeeBal

Известный
Автор темы
Проверенный
1,477
882
Теперь про /smpatrol распишу подробнее, у меня идет следующий бинд:
/smregvarwn pmark @paramcmd(1)@
/smregvarwn pid @paramcmd(2)@
/smregvarwn ppartnerid @paramcmd(3)@
/r @nickrp($myid$)@ начинаю патруль на $pmark$, как $pid$. Доступен.
@ifandor("$ppartnerid$"=="n"?:/r В составе юнита @nickrp($ppartnerid$), N-$ppartnerid$)@

Когда я пишу /smpatrol MARY M-32 n у меня идет следующий текст:
/r William Adkins начинаю патруль на MARY, как M-32. Доступен.
При /smpatrol CONTROL L-57 7:
/r William Adkins начинаю патруль на CONTROL, как L-57. Доступен.
/r В составе юнита Mark Wilson.
Но мне нужно избавиться от косяка связанного с третьим аргументом в команде. Сменив строку в бинде на @ifandor("$ppartnerid$"==""?:/r В составе юнита @nickrp($ppartnerid$), N-$ppartnerid$)@ (т.е. удалить символ n). Чтобы если я ввел /smpatrol MARY M-32 у меня отыгралось как:
/r William Adkins начинаю патруль на MARY, как M-32. Доступен.
Но происходит так, что если я активирую бинд без третьего аргумента первый раз за сессию, то на месте $ppartnerid$ выйдет #ppartnerid#, т.е. нельзя зарегистрировать пустую переменную, а если я введу /smpatrol CONTROL L-57 7 и после снова активирую бинд без третьего аргумента, то $ppartnerid$ так и останется со значением 7, а значит у меня отыграется то, что я патрулирую с напарником и в том и в том случае. Поэтому мне нужно как-то заставить $ppartnerid$ быть nil в том случае, если в команде будет отсутствовать третий аргумент
попробуй так:

Код:
/smregvarwn pmark @paramcmd(1)@
/smregvarwn pid @paramcmd(2)@
/smregvarwn ppartnerid @ifandor("@paramcmd(3)"==""?null:@paramcmd(3))@
/r @nickrp($myid$)@ начинаю патруль на $pmark$, как $pid$. Доступен.
@ifandor("$ppartnerid$"=="null"?:/r В составе юнита @nickrp($ppartnerid$), N-$ppartnerid$)@

то есть, если третий аргумент отсутствует - @ifandor("@paramcmd(3)"==""?null:@paramcmd(3))@ запишет null в значение переменной ppartnerid. А последняя строка будет проверять значение этой переменной, и если это значение null - будет возвращаться пустая строка. Биндер же в свою очередь имеет проверку на то, пустая ли строка и не будет её отправлять автоматически (то есть не нужно вручную ставить отправку "Без отправки")

Так, насчет редактора, там скорее даже не переменные, а константы, которые пользователь будет вписывать вручную как, допустим, в шпаргалках, что-то вроде следующего:
rank = Офицер
pd = RCSD
defaultnum = 0
Чтобы далее их использовать в биндере как $rank$, $pd$ и $defaultnum$, т.е. отпадает зависимость регистрировать их каждый сеанс
может реализуем такое. + все переменные, созданные на одну сессию сохраняются при перезагрузке/краше биндера, поэтому нет надобности их пересоздавать.

А так, можешь пока создавать обычные переменные. https://github.com/GrezeeBal/SnailMaticDocs/blob/main/SNAILMATIC_DOCUMENTATION.md#11-информация-для-разработчиков-snailmatic-api

например (файл закинуть в \Документы\GTA San Andreas User Files\SAMP\SnailMatic\variables):

Lua:
registerVariable('rank', 'Мой ранг', 'Капрал')
registerVariable('defaultnum', 'defaultnum', 0)
registerVariable('pd', 'pd', 'RCSD')
-- можно и так: registerVariable('pd', 'pd', function() return 'RCSD' end)
 

Вложения

  • test.lua
    133 байт · Просмотры: 3
Последнее редактирование:
  • Нравится
Реакции: Strand

Strand

Участник
48
27
Итак, все исправно работает, даже свой модуль написал. Но случилась одна неприятная ситуация. После того, как лаунчер Аризоны почистил мне игру, пришлось переустанавливать snailmatic и остальные моды. В итоге у меня перестали работать боковые кнопки мыши для назначения их как горячие клавиши.
Прикрепляю профиль, настройки, мунлог и нужные переменные
 

Вложения

  • moonloader.log
    3.5 KB · Просмотры: 2
  • RCSP.json
    31.2 KB · Просмотры: 3
  • snailmatic.json
    1.8 KB · Просмотры: 2
  • arzcars.lua
    12.5 KB · Просмотры: 2
  • rcsd.lua
    84 байт · Просмотры: 2
  • vehColor.lua
    6.3 KB · Просмотры: 2