- 2,696
- 1,468
С версии SAMPFUNCS 2.0 можно создавать локальные SAMP диалоги.
Слово "локальные" наверно всем понятно, для тех кто в танке: "появляется только у Вас и никак не появляет на сервер".
Диалог может быть:
Максимум колонок - 4.
Создание диалогов:
B + 1(клавиша 1) - открыть диалог типа DIALOG_STYLE_MSGBOX
B + 2(клавиша 2) - открыть диалог типа DIALOG_STYLE_INPUT
B + 3(клавиша 3) - открыть диалог типа DIALOG_STYLE_LIST
B + 4(клавиша 4) - открыть диалог типа DIALOG_STYLE_PASSWORD
Слово "локальные" наверно всем понятно, для тех кто в танке: "появляется только у Вас и никак не появляет на сервер".
Диалог может быть:
- С текстом;
- Со списком;
- С полем для ввода текста, а также можно и скрывать "введенное" в это поле точками;
- Список с несколькими колонками;
- Список с несколькими колонками и их заголовками.
В начало кода(после {$CLEO}) вставить константы(они необязательны, но так становится более понятнее код):
CLEO:
const
DIALOG_STYLE_MSGBOX = 0 // С текстом
DIALOG_STYLE_INPUT = 1 // С полем для ввода текста
DIALOG_STYLE_LIST = 2 // Со списком
DIALOG_STYLE_PASSWORD = 3 // С полем для ввода текста, текст заменяется точками
DIALOG_STYLE_TABLIST = 4 // Похож на DIALOG_STYLE_LIST, но может быть разбит на несколько колонок
DIALOG_STYLE_TABLIST_HEADERS = 5 // Тот же, что и DIALOG_STYLE_TABLIST, но имеет заголовки для колонок
end
Тип диалога: DIALOG_STYLE_MSGBOX
(с текстом, без особенностей)
(с текстом, без особенностей)
Создадим локальный диалог с помощью кнопки B(англ.), без обработки его "отправляемых" данных(для этого используется опкод 0B3B):
Нам недостаточно просто создать его, то сделаем обработчик "отправляемых" данных:
CLEO:
0B3B: samp show_dialog id 45 caption "Первый диалог" text "{ffffff}Хей хей хей! Это же {ff0000}первый {ffffff}диалог!" button_1 "Уря" button_2 "Закрыть" style DIALOG_STYLE_MSGBOX
// ; Локальный диалог с идом 45 был создан.
Нам недостаточно просто создать его, то сделаем обработчик "отправляемых" данных:
CLEO:
if 0B3C: samp is_dialog_responded id 45 button 1@ list_item 0 input_text 0 // Логгируем нажатие кнопки диалога с идом 45
then
if 1@ == 1 // Была нажата первая кнопка
then 0af8: chat "Была нажата первая кнопка: {ffff00}Уря" -1
else
// Иначе второй кнопкой или же просто закрыт(esc'ом, например) / 1@ == 0
0af8: chat "Была нажата вторая кнопка: {ffff00}Закрыть" -1
end
end
Тип диалога: DIALOG_STYLE_INPUT
(с вводом для текста)
(с вводом для текста)
Создадим локальный диалог с помощью кнопки B(англ.), без обработки его "отправляемых" данных(для этого используется опкод 0B3B):
Сделаем обработчик "отправляемых" данных для данного типа диалога:
CLEO:
0B3B: samp show_dialog id 46 caption "Второй диалог" text "А ниже поле для ввода" button_1 "Закрыть" button_2 "Уря" style DIALOG_STYLE_INPUT
// ; Локальный диалог с идом 46 был создан.
Сделаем обработчик "отправляемых" данных для данного типа диалога:
CLEO:
0ac8: alloc 2@ size 64 // Выделим память для хранения введеного текста // здесь неправильно выбрана позиция этого выделения, его лучше вставить после создания
// и очистить после обработки
if 0B3C: samp is_dialog_responded id 46 button 1@ list_item 0 input_text 2@ // Логгируем нажатие кнопки диалога и введеного текста с идом 46
then
if 1@ == 1 // Была нажата первая кнопка
then
0af8: chat "Была нажата первая кнопка: {ffff00}Уря" -1
0af8: chat "Введеный текст: {ffff00}%s" -1 2@
else
// Иначе второй кнопкой или же просто закрыт(esc'ом, например) / 1@ == 0
0af8: chat "Была нажата вторая кнопка: {ffff00}Закрыть" -1
end
end
0ac9: free 2@ // Очистим выделенную ранее память, больше необходима // здесь неправильно выбрана позиция этого очищения, причина указана в начале кода
Тип диалога: DIALOG_STYLE_LIST
(с выбором элементов/список)
(с выбором элементов/список)
Создадим локальный диалог с помощью кнопки B(англ.), без обработки его "отправляемых" данных(для этого используется опкод 0B3B):
Сделаем обработчик "отправляемых" данных для данного типа диалога:
CLEO:
0ac8: alloc 0@ size 64 // Выделяем память под список элементов(кол-во текста должно быть не больше 64 символов(пробелы и переходы на новую строку тоже равны 1 символу)
0ad3: format_stirng 0@ = "Первый пункт%cВторой пункт%cТретий пункт" 0xA 0xA // Создаем список, 0xA - означает переход на новую строку, а %c указывается в самой строке
// %c = 0xA(их кол-во должно совпадать). %c не всегда предназначается для 0xA, об этом лучше не заморачиваться или прочитать какой-нибудь вики про форматирование строк
0B3B: samp show_dialog id 47 caption "Третий диалог" text 0@ button_1 "Выбрать" button_2 "Закрыть" style DIALOG_STYLE_LIST
// ; Локальный диалог с идом 47 был создан.
0ac9: free 0@ // Освобождаем память, больше не нужна.
Сделаем обработчик "отправляемых" данных для данного типа диалога:
CLEO:
if 0B3C: samp is_dialog_responded id 47 button 1@ list_item 3@ input_text 0 // Логгируем нажатие кнопки диалога и выбранного элемента из списка диалога 47
then
if 1@ == 1 // Была нажата первая кнопка
then
0af8: chat "Была нажата первая кнопка: {ffff00}Уря" -1
0af8: chat "Был выбран элемент номер: {ffff00}%d" -1 3@
if 3@ == 0
then
0af8: chat "Был выбран элемент: {ffff00}Первый пункт" -1
end
if 3@ == 1
then
0af8: chat "Был выбран элемент: {ffff00}Второй пункт" -1
end
if 3@ == 2
then
0af8: chat "Был выбран элемент: {ffff00}Третий пункт" -1
end
else
// Иначе второй кнопкой или же просто закрыт(esc'ом, например) / 1@ == 0
0af8: chat "Была нажата вторая кнопка: {ffff00}Закрыть" -1
end
end
Тип диалога: DIALOG_STYLE_PASSWORD
(с вводом для текста, текст в поле меняется точками/звездочками)
(с вводом для текста, текст в поле меняется точками/звездочками)
Создадим локальный диалог с помощью кнопки B(англ.), без обработки его "отправляемых" данных(для этого используется опкод 0B3B):
Сделаем обработчик "отправляемых" данных для данного типа диалога, идентичен с типом DIALOG_STYLE_INPUT:
CLEO:
0B3B: samp show_dialog id 48 caption "Второй диалог" text "А ниже поле для ввода" button_1 "Закрыть" button_2 "Уря" style DIALOG_STYLE_PASSWORD
// ; Локальный диалог с идом 48 был создан.
Сделаем обработчик "отправляемых" данных для данного типа диалога, идентичен с типом DIALOG_STYLE_INPUT:
CLEO:
0ac8: alloc 2@ size 64 // Выделим память для хранения введеного текста // здесь неправильно выбрана позиция этого выделения, его лучше вставить после создания
// и очистить после обработки
if 0B3C: samp is_dialog_responded id 48 button 1@ list_item 0 input_text 2@ // Логгируем нажатие кнопки диалога и введеного текста с идом 46
then
if 1@ == 1 // Была нажата первая кнопка
then
0af8: chat "Была нажата первая кнопка: {ffff00}Уря" -1
0af8: chat "Введеный текст: {ffff00}%s" -1 2@
else
// Иначе второй кнопкой или же просто закрыт(esc'ом, например) / 1@ == 0
0af8: chat "Была нажата вторая кнопка: {ffff00}Закрыть" -1
end
end
0ac9: free 2@ // Очистим выделенную ранее память, больше необходима // здесь неправильно выбрана позиция этого очищения, причина указана в начале кода
Тип диалога: DIALOG_STYLE_TABLIST
(список (DIALOG_STYLE_LIST) с колонками)
Для разделения на колонки в каждой строке используется знак табуляции (\t, 0x9), от их количества зависит количество колонок.(список (DIALOG_STYLE_LIST) с колонками)
Максимум колонок - 4.
Тип диалога: DIALOG_STYLE_TABLIST_HEADERS
(список с именованными колонками (наследуется от DIALOG_STYLE_TABLIST))
Тот же, что и DIALOG_STYLE_TABLIST, но первая строка служит заголовком для списка. Так же может иметь только 4 колонки.(список с именованными колонками (наследуется от DIALOG_STYLE_TABLIST))
Пример скрипта
(объединены диалоги типов DIALOG_STYLE_MSGBOX/INPUT/LIST/PASSWORD)
(объединены диалоги типов DIALOG_STYLE_MSGBOX/INPUT/LIST/PASSWORD)
CLEO:
{$CLEO}
const
DIALOG_STYLE_MSGBOX = 0 // С текстом
DIALOG_STYLE_INPUT = 1 // С полем для ввода текста
DIALOG_STYLE_LIST = 2 // Со списком
DIALOG_STYLE_PASSWORD = 3 // С полем для ввода текста, текст заменяется точками
end
0000:
0662: "by legend2360"
0662: "BlastHack - cheating is art"
while not SAMP.Available()
wait 400
end
0ac8: alloc 2@ size 64 // буфер для хранения введенего текста
while true
wait 0
if 0ab0: key_down 66
then
while 0ab0: key_down 66
wait 0
if 0ab0: key_down 49
then
0B3B: samp show_dialog id 45 caption "Первый диалог" text "{ffffff}Хей хей хей! Это же {ff0000}первый {ffffff}диалог!" button_1 "Уря" button_2 "Закрыть" style DIALOG_STYLE_MSGBOX
break
end
if 0ab0: key_down 50
then
0B3B: samp show_dialog id 46 caption "Второй диалог" text "А ниже поле для ввода" button_1 "Уря" button_2 "Закрыть" style DIALOG_STYLE_INPUT
break
end
if 0ab0: key_down 51
then
0ac8: alloc 0@ size 64
0ad3: format_stirng 0@ = "Первый пункт%cВторой пункт%cТретий пункт" 0xA 0xA
0B3B: samp show_dialog id 47 caption "Третий диалог" text 0@ button_1 "Выбрать" button_2 "Закрыть" style DIALOG_STYLE_LIST
0ac9: free 0@
break
end
if 0ab0: key_down 52
then
0B3B: samp show_dialog id 48 caption "Второй диалог" text "А ниже поле для ввода" button_1 "Уря" button_2 "Закрыть" style DIALOG_STYLE_PASSWORD
break
end
end
while 0ab0: key_down 66
wait 0
end
end
// DIALOG_STYLE_MSGBOX
if 0B3C: samp is_dialog_responded id 45 button 1@ list_item 0 input_text 0
then
if 1@ == 1 // Была нажата первая кнопка
then
0af8: chat "Диалог был закрыт первой кнопкой: {ffff00}Уря" -1
else
0af8: chat "Диалог был закрыт второй кнопкой: {ffff00}Закрыть" -1
end
end
// DIALOG_STYLE_LIST
if 0B3C: samp is_dialog_responded id 47 button 1@ list_item 3@ input_text 0 // Логгируем нажатие кнопки диалога и выбранного элемента из списка диалога 47
then
if 1@ == 1 // Была нажата первая кнопка
then
0af8: chat "Была нажата первая кнопка: {ffff00}Уря" -1
0af8: chat "Был выбран элемент номер: {ffff00}%d" -1 3@
if 3@ == 0
then
0af8: chat "Был выбран элемент: {ffff00}Первый пункт" -1
end
if 3@ == 1
then
0af8: chat "Был выбран элемент: {ffff00}Второй пункт" -1
end
if 3@ == 2
then
0af8: chat "Был выбран элемент: {ffff00}Третий пункт" -1
end
else
0af8: chat "Была нажата вторая кнопка: {ffff00}Закрыть" -1
end
end
// DIALOG_STYLE_INPUT & DIALOG_STYLE_PASSWORD
if 0B3C: samp is_dialog_responded id 46 button 1@ list_item 0 input_text 2@
then
if 1@ == 1 // Была нажата первая кнопка
then
0af8: chat "Была нажата первая кнопка: {ffff00}Уря" -1
0af8: chat "Введеный текст: {ffff00}%s" -1 2@
else
0af8: chat "Была нажата вторая кнопка: {ffff00}Закрыть" -1
end
end
if 0B3C: samp is_dialog_responded id 48 button 1@ list_item 0 input_text 2@
then
if 1@ == 1 // Была нажата первая кнопка
then
0af8: chat "Была нажата первая кнопка: {ffff00}Уря" -1
0af8: chat "Введеный текст: {ffff00}%s" -1 2@
else
0af8: chat "Была нажата вторая кнопка: {ffff00}Закрыть" -1
end
end
end
Создание диалогов:
B + 1(клавиша 1) - открыть диалог типа DIALOG_STYLE_MSGBOX
B + 2(клавиша 2) - открыть диалог типа DIALOG_STYLE_INPUT
B + 3(клавиша 3) - открыть диалог типа DIALOG_STYLE_LIST
B + 4(клавиша 4) - открыть диалог типа DIALOG_STYLE_PASSWORD
Последнее редактирование: