[Урок] Фейк диалог
|
|
Joni228 |
Дата: Вторник, 12.12.2017, 21:02 | Сообщение # 1
|
Бывалый
Сообщений: 314
Статус: Offline
|
Всем привет, многие писали мне в личку, мол как ты делаешь фейк диалоги? Вот вам и ответ!
Что нам понадобится? 1. AutoHotKey 2. Samp UDF 3. SciTE4AutoHotKey ( Для удобства )
Приступим к написанию фейк Dialog: 1. Для начала мы подключим SAMP UDF к нашему скрипту:
Код #include SAMPUDF.ahk ; Подключаем SAMPUDF #IfWinActive GTA:SA:MP ; Все действия скрипта будут происходить в окне GTA:SA:MP
2. Что бы не мучать себя с переписыванием серверных диалогов и подборки их текста, можно просто взять и скопировать их. Вы спросите как? В SAMP UDF есть такая функция, как "getDialogText()", ей мы и воспользуемся!
Код NumPad1:: ; Кнопка активации DialogText := getDialogText() ; Функция присвоенная в переменную FileAppend, %DialogText%, %A_ScriptDir%\Dialog.txt ; Сохранение текста с переменной в Dialog.txt return ; Конец действия
После мы сможем увидить это: ![](https://i.imgur.com/CecCDBz.png) 3. Дальше мы создадим сам диалог:
Код NumPad2:: ; Кнопка активации text := ["{FFFFFF}Лицензия на авто: {FF6347}Нет " , "{FFFFFF}Лицензия на мото: {FF6347}Нет " , "{FFFFFF}Лицензия на полеты: {FF6347}Нет " , "{FFFFFF}Лицензия на плавание: {FF6347}Нет " , "{FFFFFF}Лицензия на ловлю рыбы: {FF6347}Нет " , "{FFFFFF}Лицензия на оружие: {FF6347}Нет"] ; Текст диалога showDialog("0", "Лицензии", gettext(text)[1], "Ок", "", 9998) ; Сам диалог return ; Конец действия
И мы уже увидим готовый вариант нашего диалога: ![](https://i.imgur.com/ceRC0cZ.png) 4. Вы думали мы закончили? А как же функционал, и постановка? Сейчас мы делаем копию нашего предыдущего диалога, и меняем ему STYLE с 0 на 2. У нас должно получиться это: ![](https://i.imgur.com/2imFVJs.png) Ну на крайни случай оставлю код, вдруг кому то не понятно:
Код NumPad3:: ; Кнопка активации text := ["{FFFFFF}Лицензия на авто: {FF6347}Нет " , "{FFFFFF}Лицензия на мото: {FF6347}Нет " , "{FFFFFF}Лицензия на полеты: {FF6347}Нет " , "{FFFFFF}Лицензия на плавание: {FF6347}Нет " , "{FFFFFF}Лицензия на ловлю рыбы: {FF6347}Нет " , "{FFFFFF}Лицензия на оружие: {FF6347}Нет"] ; Текст диалога showDialog("2", "Лицензии", gettext(text)[1], "Ок", "Отмена", 9998) ; Сам диалог return ; Конец действия
5. Изменим в нашем случае "Нет" на переменные:
Код text := ["{FFFFFF}Лицензия на авто: {FF6347}" avto , "{FFFFFF}Лицензия на мото: {FF6347}" moto , "{FFFFFF}Лицензия на полеты: {FF6347}" flycar , "{FFFFFF}Лицензия на плавание: {FF6347}" lodka , "{FFFFFF}Лицензия на ловлю рыбы: {FF6347}" fish , "{FFFFFF}Лицензия на оружие: {FF6347}" guns] ; Текст диалога
Правда в моем случае это не подойдет, т.к. под слово "Нет" и "Да" разные цвета! Сейчас я покажу код под свой вариант...
Код text := ["{FFFFFF}Лицензия на авто: " (avto ? "{10F441}Есть":"{FF6347}Нет") ,"{FFFFFF}Лицензия на мото: " (moto ? "{10F441}Есть":"{FF6347}Нет") ,"{FFFFFF}Лицензия на полеты: " (flycar ? "{10F441}Есть":"{FF6347}Нет") ,"{FFFFFF}Лицензия на плавание: " (lodka ? "{10F441}Есть":"{FF6347}Нет") ,"{FFFFFF}Лицензия на ловлю рыбы: " (fish ? "{10F441}Есть":"{FF6347}Нет") ,"{FFFFFF}Лицензия на оружие: " (guns ? "{10F441}Есть":"{FF6347}Нет")] ; Текст диалога
6. Сделаем функционал под наш диалог настроек:
Код $~LButton:: $~Enter:: if(isDialogOpen()) { if(GetKeyState("LButton", "P")) { Sleep, isDialogButtonSelected(1) ? 150 : 50 if(isDialogOpen() || isDialogButtonSelected(2)) return } title := getDialogCaption() index := getDialogLineNumber() dlg := getDialogID() if(dlg == 9998) { if (index = 1) { ; Здесь код нашего диалога под ID 9998, и пункт 1. В нашем случае это Лицензии на Авто } } } return
7. Теперь напишим саму функцию: В моем случае:
Код if (index = 1) { avto := !avto }
В случае если надо вводить свой текст, мы используем данный код:
Код ShowDialog("1", "Настройка | by Revalto", "{FFFFFF}Описание", "ОКЕЙ", "Закрыть", 9999) input, Name, V, {enter} KeyWait, Enter, D KeyWait, P, D
Вот и весь собственно диалог готов: Скрины: ТыК | ТыК 2
Как сделать сохранение в INI Файл?
Код IniWrite, %Name%, %A_ScriptDir%\Settings.ini, Info, Name
Как читать INI Файл?
Код Path=%A_ScriptDir%\Settings.ini IniRead, Sections, % Path, , , % A_Space Loop, parse, Sections, `n { IniRead, Data, % Path, % A_LoopField, , % A_Space Loop, parse, Data, `n RegExMatch(A_LoopField, "(.*?)=(.*)", OutputVar) , %OutputVar1% := OutputVar2 }
Как сделать фейк сообщение при открытии фейк диалога?
Код addChatMessageEx("{FF6347}", "[Подсказка] {FFFFFF}Вы успешно показали свой паспорт игроку {FF6347}" Name)
Вставляем в код, где открывается диалог. В данном случае, Name указывается в настройках (Взято с моего скрипта FPass)
Как считать свой ник и ID? Воспользуйтесь функциями с SAMP UDF:
Код ; # - getUsername() - Выводит твой ник ; # - getId() - Выводит твой ид
Спасибо всем кому была интересна это статья. P.S. Я не считаю себя лучшим кодером в сфере AutoHotKey, но дать урок начинающим вполне себе могу. Если здесь присутствует "Говно-Код", уж простите) Оформление темы в ближайшее время поправлю)
Думаю Царь меня простит, за не использование его функционала для диалога :D
Сообщение отредактировал Joni228 - Суббота, 16.12.2017, 22:39 |
|
|
|
Q-Q |
Дата: Вторник, 12.12.2017, 21:07 | Сообщение # 2
|
I want to be with you 24/7
Сообщений: 89
Статус: Offline
|
Очень и очень полезная тема. Сделай еще парочку уроков.
Эщкере, кусь)
|
|
|
|
[dev]Marvin |
Дата: Вторник, 12.12.2017, 22:43 | Сообщение # 3
|
Новичок
Сообщений: 28
Статус: Offline
|
Шел 2017, люди делают уроки на фейк-диалоги, да еще и неправильно :/
|
|
|
|
Joni228 |
Дата: Среда, 13.12.2017, 20:24 | Сообщение # 4
|
Бывалый
Сообщений: 314
Статус: Offline
|
Цитата [dev]Marvin ( ![Ссылка на цитируемый текст](/.s/img/fr/ic/4/lastpost.gif) ) Шел 2017, люди делают уроки на фейк-диалоги, да еще и неправильно :/ Многие люди спрашивают как делать, что да как? А вот с "Неправильные" я не соглашусь.. Вроде все скрины предоставлены, исходник тоже. Удивительно, почему же все работает? А как же мои Фейк скрипты которые я вылаживал? Странно, они тоже работают.Добавлено (13.12.2017, 20:24) ---------------------------------------------
Цитата Q-Q ( ![Ссылка на цитируемый текст](/.s/img/fr/ic/4/lastpost.gif) ) Очень и очень полезная тема. Сделай еще парочку уроков. Спасибо)
|
|
|
|
[dev]Marvin |
Дата: Четверг, 14.12.2017, 07:27 | Сообщение # 5
|
Новичок
Сообщений: 28
Статус: Offline
|
Joni228, не вылаживал, а выкладывал ._. 1) Зачем объявлять текст в переменную, если можно сразу запихнуть в функцию?
Код text := ["{FFFFFF}Лицензия на авто: {FF6347}Нет ", "{FFFFFF}Лицензия на мото: {FF6347}Нет ", "{FFFFFF}Лицензия на полеты: {FF6347}Нет ", "{FFFFFF}Лицензия на плавание: {FF6347}Нет ", "{FFFFFF}Лицензия на ловлю рыбы: {FF6347}Нет ", "{FFFFFF}Лицензия на оружие: {FF6347}Нет"] ; Текст диалога showDialog("2", "Лицензии", gettext(text)[1], "Ок", "Отмена", 9998) ; Сам диалог return ; Конец действия
2) Зачем после переменных идут запятые? Это не Паскаль, тут можно ничего и не писать
Код text := ["{FFFFFF}Лицензия на авто: {FF6347}" avto,
3) Зажатие клавиши - это очень глупое решение, идет запоминание всех символов, даже, если ты удалить какие-либо символы, в твоей переменные они все равно останутся. Есть специальный адрес, который считывает инфу с диалогов с ID1 и 4 (вроде)
Код ShowDialog("1", "Настройка | by Revalto", "{FFFFFF}Описание", "ОКЕЙ", "Закрыть", 9999) input, Name, V, {enter} KeyWait, Enter, D KeyWait, P, D
Оно может и будет работать, но с костылями.
|
|
|
|
Joni228 |
Дата: Суббота, 16.12.2017, 22:29 | Сообщение # 6
|
Бывалый
Сообщений: 314
Статус: Offline
|
Цитата [dev () Marvin;4415738]Joni228, не вылаживал, а выкладывал ._. 1) Зачем объявлять текст в переменную, если можно сразу запихнуть в функцию? Код
text := ["{FFFFFF}Лицензия на авто: {FF6347}Нет ", "{FFFFFF}Лицензия на мото: {FF6347}Нет ", "{FFFFFF}Лицензия на полеты: {FF6347}Нет ", "{FFFFFF}Лицензия на плавание: {FF6347}Нет ", "{FFFFFF}Лицензия на ловлю рыбы: {FF6347}Нет ", "{FFFFFF}Лицензия на оружие: {FF6347}Нет"] ; Текст диалога showDialog("2", "Лицензии", gettext(text)[1], "Ок", "Отмена", 9998) ; Сам диалог return ; Конец действия
2) Зачем после переменных идут запятые? Это не Паскаль, тут можно ничего и не писать Код
text := ["{FFFFFF}Лицензия на авто: {FF6347}" avto,
3) Зажатие клавиши - это очень глупое решение, идет запоминание всех символов, даже, если ты удалить какие-либо символы, в твоей переменные они все равно останутся. Есть специальный адрес, который считывает инфу с диалогов с ID1 и 4 (вроде) Код
ShowDialog("1", "Настройка | by Revalto", "{FFFFFF}Описание", "ОКЕЙ", "Закрыть", 9999) input, Name, V, {enter} KeyWait, Enter, D KeyWait, P, D
Оно может и будет работать, но с костылями.
1. Удобство 2. Удобство ![](https://i.imgur.com/c7jlT2P.png) 3. Цитата Joni228 ( ![Ссылка на цитируемый текст](/.s/img/fr/ic/4/lastpost.gif) ) P.S. Я не считаю себя лучшим кодером в сфере AutoHotKey, но дать урок начинающим вполне себе могу. Если здесь присутствует "Говно-Код", уж простите)
Сообщение отредактировал Joni228 - Суббота, 16.12.2017, 22:29 |
|
|
|
CZAR |
Дата: Суббота, 16.12.2017, 22:33 | Сообщение # 7
|
Czar Of Scripts
Сообщений: 1373
Статус: Offline
|
[dev]Marvin. 1, 2. В теме приведен не правильный код. (уже поправили, теперь более понятней, почему так) 3. Тут ты прав, но 1 и 3 диалоги с вводом текста, и адрес памяти такой же как и у чата.
Я в ВК Ушел в веб.
• Ничего не покупаю. • Способы не проверяю.
У меня теперь новый домен, если ссылка не работает - напишите.
Гарант Cheat-Master: *тема* AHK [S-RP] House Finder / House Teleporter [SAMP] Online Counter [S-RP] [For Event] Show Star [S-RP] AntiCasino [S-RP] [BOT] Auto Fisher + Auto Find Worm + Auto Cook [S-RP] [BOT] /dance Winner | Делаем розыгрыши среди участников темы. SAMP-UDF [AHK Урок] Выбор в диалогах мышкой и enter`ом [SAMP] Быстрый ответ на СМС [ERP] Помощник для адвоката [DRP] FakeTime Достижения: - 26.02.2017 - 03.01.2018 - 26.05.2018 - 22.09.2018 - 04.04.2019
Сообщение отредактировал Phoenixxx_Czar - Суббота, 16.12.2017, 22:37 |
|
|
|
[dev]Marvin |
Дата: Понедельник, 18.12.2017, 00:18 | Сообщение # 8
|
Новичок
Сообщений: 28
Статус: Offline
|
Joni228, так зачем давать другим уроки, когда ты сам делаешь ошибки?...
|
|
|
|
|
[dev]Marvin |
Дата: Вторник, 19.12.2017, 22:35 | Сообщение # 10
|
Новичок
Сообщений: 28
Статус: Offline
|
Phoenixxx_Czar, мое субъективное мнение: Я считаю, если человек взялся делать уроки для других - он должен быть профессионалом, а не новичком, делая ошибки в глупых местах. Возьму в пример Тумаша, он хоть и положил лопату на уроки, однако, он начал их делать только тогда, когда стал действительно профессионалом. Я, например, даже не знал про операции, которые он говорил вроде во 2-м уроке (возведение в квадрат/корень/модуль и т.д.) Тут-же все иначе, человек только познал бытие UDF, и уже лезет учить других. Но смысл от этого? Да, ошибки могут совершать все, но на этих ошибках надо учиться, и не допускать их больше. А тут что? Input...Такое в каком году делали? Напомнишь?
|
|
|
|
|