Дата: Воскресенье, 23.07.2017, 00:40 | Сообщение # 1
Боец
Сообщений: 202
Статус: Offline
>Выполнен:Фикс #1от[23.07.2017] - Fix, Updates >Выполнен:Фикс #2от[24.07.2017] - Fix, Updates, Deletes bags >Выполнен:Фикс #3от[25.07.2017] - Cmd: LButton и Enter >Выполнен:Фикс #4от[26.07.2017] - Multi Cmd System, Valid Button (1, 2), Small Fix's,
---------------------------------------------------------------------- Обычный диалог расположен по горизонтали представьте что будет если мы разделим его на части по массивам то получим довольно не плохую систему управления диалогами
На данный момент работает с диалогами типа: Style: 2> Диалог списокButton (1, 2) Style: 0> Диалог сообщениеButton (1, 2) ---------------------------------------------------------------------- ~~~~~~~~~~~~~~~~~~~~ Функционал ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Управление: Esc - Возвращает вас назад на 1 уровень диалога Лкм (Left Mouse Button) - Выбирает пункты и активирует их в диалогах S(2), настройка: (1х или 2x - клика) Enter - Активирует выбранный пункт пунктов в диалогах S(2) и выполняет cmd в S(0), настройка (0x или 1х - клика) Возможности: 1. Система: "Multi LVL" > создание и открытие диалогов в несколько уровней. 2. Система: "Multi CMD" > прикрепление cmd-команд к строкам диалога S(2), а также к кнопке Button(1) в S(0). 3. Система: "IQ Back" > возможность возврата на один уровень диалога назад, к моменту открытия первоначального диалога и полное закрытие. 4. Система: "Hard Dialogs" > возможность построения комбинированного функционала в диалогах на разных уровнях. 5. Система: "Multi Control" > управление через: кнопки диалога, мышку, клавиатуру, а также комбинируя их ( Button(1) - cmd и переходы по диалогам, Button(2) - закрытие).
ControlShowDialog(dialogName, index="null", LButton="2", Enter="0") dialogName - "заголовок" нужного диалога index - "Номер" нужного диалога с массива LButton- активация Лкм (мыши)> CMD::0 - откл | 1 - Один клик | 2 - Двойной клик Enter - активация Enter> CMD:0 - откл | 1 - Одно нажатие | 2 - Двойное нажатие
Пример построения диалогового массива ||||| ВАЖНО:(Null это пустое значение типа "") -------------------------------------------------------------------------------
; Массивы диалогов global dMarcers := ["null", "Перейти на 2й уровень", "Второй диалог", "Открыть диалог сообщение 2го уровня", "Важная заметка", "БЛЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ", "Перейти на 3й уровень", "Перейти на 4й уровень", "Открыть диалог сообщение 3го уровня", "Открыть диалог сообщение 4го уровня"] ; Маркеры для прижка на нужный нам диалог global dStyle := ["2", "2", "2", "0", "0", "null", "2", "2", "0", "0"] ; Задаём в массиве id скинов диалогов global dName := ["[С.У.Д] by MrGPro", "[2] > Второй уровень", "Второй диалог - открыт", "Диалог сообщение 2го уровня", "Инфа", "null", "[3] > Третий уровень", "[4] > Четвертый уровень", "Диалог сообщение 3го уровня", "Диалог сообщение 4го уровня"] ; Задаём заголовки в диалог global dText := ["Перейти на 2й уровень`nЗапуск команду 1 уровня", "Перейти на 3й уровень`nОткрыть диалог сообщение 2го уровня`nЗапустить комманду 2го уровня", "Esc - вернуться на 1 уровень назад`nВыполнить - для запуска команды`nЗакрыть - для закрытия диалога", "Esc - вернуться на 1 уровень назад`nВыполнить - для запуска команды`nЗакрыть - для закрытия диалога", "null", "Перейти на 4й уровень`nОткрыть диалог сообщение 3го уровня", "Перейти на 4й уровень`nОткрыть диалог сообщение 3го уровня", "И так далее ... (мульти лвл диалога)`nОткрыть диалог сообщение 4го уровня", "Esc - вернуться на 1 уровень назад`nВыполнить - для запуска команды`nЗакрыть - для закрытия диалога", "Esc - вернуться на 1 уровень назад`nВыполнить - для запуска команды`nЗакрыть - для закрытия диалога"] ; Задаём текс диалога
if (LButton >= 3) return if (Enter >= 3) return if (index = "null") return else { history.Insert(index) fist := index index:="null" } ; Выполняем дейстия если открыт диалог if (getDialogCaption() = dialogName and isDialogOpen() = 1) { while (break_out < 1) { addchatmessage( getButtonOne " ---------- " getButtonTwo) if (LButton != 0) { for i, dial in dName { if (getDialogCaption() = dial) butto := i }
if (isDialogButtonSelected(2) = 1 and isDialogOpen() = 1) { if (GetKeyState("LButton")) { if (getDialogStyle() > 0 and isDialogOpen() = 1) { history := [] break_out := 1 addchatmessage("[С.У.Д] by MrGPro > Кнопка: " dBut2[butto] " - выполнила закрытие") ;================================================================ ТУТ break return } } }
if (isDialogButtonSelected(1) = 1 and isDialogOpen() = 1) { if (GetKeyState("LButton")) { if (getDialogStyle() > 0 and isDialogOpen() = 1) { theLineGui := getDialogLineNumber() theTextGui := getDialogLine(theLineGui) theStyleGui := getDialogStyle() theLogoGui := getDialogCaption() for z, objNamez in dName { if (theLogoGui = objNamez) openDialog := A_Index } find := CmdBut1[openDialog] If (InStr(find, "|")) { Loop, parse, find, |, { objLinesCMD := A_Index if (theLineGui = objLinesCMD) { theSplitText := A_LoopField selectLineDialog := A_Index } } }
if (isDialogButtonSelected(1) = 1) and (theSplitText = null or theSplitText = "" or theSplitText = "null") and (getDialogStyle() > 0) { nextDialog := 0 for i, objMarcer in dMarcers { if (theTextGui = objMarcer) { nextDialog:=1 nextDialog:=1 if (dBut2[A_Index] != null or dBut2[A_Index] != "") { history.Insert(A_Index) ShowDialog(dStyle[A_Index], dName[A_Index], dText[A_Index], dBut1[A_Index], dBut2[A_Index]) ; Диалог } if (dBut2[A_Index] = null or dBut2[A_Index] = "") { history.Insert(A_Index) ShowDialog(dStyle[A_Index], dName[A_Index], dText[A_Index], dBut1[A_Index]) } } } if (nextDialog < 1) { nextDialog:=0 addchatmessage("[С.У.Д] by MrGPro > Кнопка: " dBut1[openDialog] " - не привязана. Параметр: " theSplitText) ;===================================================================== ТУТ history := [] break_out := 1 break return } } else { if (isDialogButtonSelected(1) = 1) and (theSplitText = null) or (theSplitText = "") or (theSplitText = "null"){ addchatmessage("[С.У.Д] by MrGPro > Кнопка: " dBut1[openDialog] " - не привязана. Параметр: " theSplitText) ;================================================================= ТУТ history := [] break_out := 1 break return } if (isDialogButtonSelected(1) = 1) and (theSplitText != null) or (theSplitText != "") or (theSplitText != "null") { addchatmessage("[С.У.Д] by MrGPro > Кнопка: " dBut1[openDialog] " - привязана к команде ~ " theSplitText) ;=================================================================== ТУТ history := [] break_out := 1 gosub % theSplitText break return } } } if (GetKeyState("LButton")) { if (getDialogStyle() < 1 and isDialogOpen() = 1) { theStyleGui := getDialogStyle() theLogoGui := getDialogCaption() for z, objNamez in dName { if (theLogoGui = objNamez) openDialogs := A_Index } finds := CmdBut1[openDialogs] If (InStr(finds, "|")) { Loop, parse, finds, |, { objLinesCMD := A_Index if (theLineGui = objLinesCMD) { theSplitText := A_LoopField selectLineDialog := A_Index } } } if (isDialogButtonSelected(1) = 1) and (theSplitText = null or theSplitText = "" or theSplitText = "null") { addchatmessage("[С.У.Д] by MrGPro > Кнопка: " dBut1[openDialogs] " - не привязана. Параметр: " theSplitText) ;================================================================= ТУТ history := [] break_out := 1 break return } if (isDialogButtonSelected(1) = 1) and (theSplitText != null or theSplitText != "" or theSplitText != "null") { addchatmessage("[С.У.Д] by MrGPro > Кнопка: " dBut1[openDialogs] " - привязана к команде ~ " theSplitText) ;================================================================= ТУТ history := [] break_out := 1 gosub % theSplitText break return }
} } if (isDialogOpen() = 0) { break_out := 1 history := [] break return }
} }
; Функция записывающая историю кликов мышки if (GetKeyState("LButton") and isDialogOpen() = 1) { if (getDialogStyle() > 0 and isDialogOpen() = 1) { Loop, %LButton% { KeyWait, LButton, D KeyWait, LButton, L } theLineMouse := getDialogLineNumber() theTextMouse := getDialogLine(theLineMouse) theStyleMouse := getDialogStyle() theLogoMouse := getDialogCaption() for z, objNamek in dName { if (theLogoMouse = objNamek) openDialog := A_Index } find := CmdBut1[openDialog] If (InStr(find, "|")) { Loop, parse, find, |, { objLinesCMD := A_Index if (theLineMouse = objLinesCMD) { theSplitText := A_LoopField selectLineDialog := A_Index } } }
if (isDialogButtonSelected(1) = 0) and (theSplitText = null or theSplitText = "" or theSplitText = "null") and (getDialogStyle() > 0) { nextDi := 0 for i, objMar in dMarcers { if (theTextMouse = objMar) { nextDi:=1 if (dBut2[A_Index] != null or dBut2[A_Index] != "") { history.Insert(A_Index) ShowDialog(dStyle[A_Index], dName[A_Index], dText[A_Index], dBut1[A_Index], dBut2[A_Index]) ; Диалог } if (dBut2[A_Index] = null or dBut2[A_Index] = "") { history.Insert(A_Index) ShowDialog(dStyle[A_Index], dName[A_Index], dText[A_Index], dBut1[A_Index]) } } } if (nextDi < 1) { nextDi:=0 addchatmessage("[С.У.Д] by MrGPro > Строка: " theTextGui[i] " - не привязана 2. Параметр: " theSplitText) ;===================================================================== ТУТ history := [] break_out := 1 break return } } else { if (isDialogButtonSelected(1) = 1) and (theSplitText = null) or (theSplitText = "") or (theSplitText = "null"){ addchatmessage("[С.У.Д] by MrGPro > Строка: " theTextGui[i] " - не привязана. Параметр: " theSplitText) ;================================================================= ТУТ history := [] break_out := 1 break return } if (isDialogButtonSelected(1) = 1) and (theSplitText != null) or (theSplitText != "") or (theSplitText != "null") { addchatmessage("[С.У.Д] by MrGPro > Строка: " theTextGui[i] " - привязана к команде ~ " theSplitText) ;=================================================================== ТУТ history := [] break_out := 1 gosub % theSplitText break return } } } } if (isDialogOpen() == 0) { history := [] break }
}
if (Enter != 0) { if (GetKeyState("Enter") and isDialogOpen() = 1) { if (getDialogStyle() > 0 and isDialogOpen() = 1) { Loop, %Enter% { KeyWait, Enter, D KeyWait, Enter, L } theLineMouse := getDialogLineNumber() theTextMouse := getDialogLine(theLineMouse) theStyleMouse := getDialogStyle() theLogoMouse := getDialogCaption() for z, objNamek in dName { if (theLogoMouse = objNamek) openDialog := A_Index } find := CmdBut1[openDialog] If (InStr(find, "|")) { Loop, parse, find, |, { objLinesCMD := A_Index if (theLineMouse = objLinesCMD) { theSplitText := A_LoopField selectLineDialog := A_Index } } }
if (isDialogButtonSelected(1) = 0) and (theSplitText = null or theSplitText = "" or theSplitText = "null") and (getDialogStyle() > 0) { nextDi := 0 for i, objMar in dMarcers { if (theTextMouse = objMar) { nextDi:=1 if (dBut2[A_Index] != null or dBut2[A_Index] != "") { history.Insert(A_Index) ShowDialog(dStyle[A_Index], dName[A_Index], dText[A_Index], dBut1[A_Index], dBut2[A_Index]) ; Диалог } if (dBut2[A_Index] = null or dBut2[A_Index] = "") { history.Insert(A_Index) ShowDialog(dStyle[A_Index], dName[A_Index], dText[A_Index], dBut1[A_Index]) } } } if (nextDi < 1) { nextDi:=0 addchatmessage("[С.У.Д] by MrGPro > Строка: " theTextGui[i] " - не привязана 2. Параметр: " theSplitText) ;===================================================================== ТУТ history := [] break_out := 1 break return } } else { if (isDialogButtonSelected(1) = 1) and (theSplitText = null) or (theSplitText = "") or (theSplitText = "null"){ addchatmessage("[С.У.Д] by MrGPro > Строка: " theTextGui[i] " - не привязана. Параметр: " theSplitText) ;================================================================= ТУТ history := [] break_out := 1 break return } if (isDialogButtonSelected(1) = 1) and (theSplitText != null) or (theSplitText != "") or (theSplitText != "null") { addchatmessage("[С.У.Д] by MrGPro > Строка: " theTextGui[i] " - привязана к команде ~ " theSplitText) ;=================================================================== ТУТ history := [] break_out := 1 gosub % theSplitText break return } } } } if (GetKeyState("Enter")) { if (getDialogStyle() < 1 and isDialogOpen() = 1) { theStyleGui := getDialogStyle() theLogoGui := getDialogCaption() for z, objNamez in dName { if (theLogoGui = objNamez) openDialogs := A_Index } finds := CmdBut1[openDialogs] If (InStr(finds, "|")) { Loop, parse, finds, |, { objLinesCMD := A_Index if (theLineGui = objLinesCMD) { theSplitText := A_LoopField selectLineDialog := A_Index } } } if (isDialogButtonSelected(1) = 0) and (theSplitText = null or theSplitText = "" or theSplitText = "null") { addchatmessage("[С.У.Д] by MrGPro > Кнопка: " dBut1[openDialogs] " - не привязана. Параметр: " theSplitText) ;================================================================= ТУТ history := [] break_out := 1 break return } if (isDialogButtonSelected(1) = 0) and (theSplitText != null or theSplitText != "" or theSplitText != "null") { addchatmessage("[С.У.Д] by MrGPro > Кнопка: " dBut1[openDialogs] " - привязана к команде ~ " theSplitText) ;================================================================= ТУТ history := [] break_out := 1 gosub % theSplitText break return }
} } if (isDialogOpen() == 0) { history := [] break }
}
if (GetKeyState("Esc")) { history.Delete(history.Length()) lastIndex:=history.Length() lastfix:=history[lastIndex] if (lastfix = fist or lastfix = "") { fullexit+=1 if (fullexit > 1) { history := [] break_out := true fullexit:=0 } } if (lastIndex > 0 and !break_out) { ShowDialog(dStyle[lastfix], dName[lastfix], dText[lastfix], dBut1[lastfix], dBut2[lastfix]) }
CmdDialog_2: addchatmessage("{6633FF}[С.У.Д] {CC00CC}by {FF0000}MrGPro {00CC33}> Успех,{6666FF} команда была запущена на {00CC33}2 уровне диалога.") return
CmdDialog_1: addchatmessage("{6633FF}[С.У.Д] {CC00CC}by {FF0000}MrGPro {00CC33}> Успех,{6666FF} команда была запущена на {00CC33}1 уровне диалога.") return
Тебе помогли не забывай про благодарность >> тыкни репутацию ---------------------------------------͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏ ----------------------------------------------------- Зам.Администратора на проекте "DayZ Epoсh SPN" сервер Arma 2OA DayZ Epoch пиратка и лицензия
Сообщение отредактировал MrGPro - Среда, 26.07.2017, 19:14
Дата: Понедельник, 24.07.2017, 20:27 | Сообщение # 2
Новичок
Сообщений: 19
Статус: Offline
MrGPro, Не знаю почему, но у меня перестал зависать самп, при открытии диалога, раньше по кд зависал. 1 Вопрос: Это баг или Так надо ? что после нажатия на кнопку закрыть скрипт ждёт 2 нажатия пкм и затем переходит по той строке которая была выбрана ?
Armadel, 1. Хз магия наверное а зависала при открытии фейк диалога или на сервере 2. Тег [Разработка] видел функция в разработке 2й лкм сделал для тестирования во избежания открытия не того диалога кнопки не реализованы пока. Omicida, Добавил и поправил
Добавлено (26.07.2017, 19:20) --------------------------------------------- UPDATE:Работают кнопки диалога, мульти создание диалогов, управление Esc, мышка, enter, внедрены cmd и не только.
Тебе помогли не забывай про благодарность >> тыкни репутацию ---------------------------------------͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏ ----------------------------------------------------- Зам.Администратора на проекте "DayZ Epoсh SPN" сервер Arma 2OA DayZ Epoch пиратка и лицензия
Честно, не думаю что это нужно выкладывать в открытый доступ. Так как тут все ужаснова-то сделано. Подобные системы принято делать используя ООП. И для работы с диалогами должен быть создан простой "интерфейс".
MrGPro, Я до сих пор не могу понять в чём разница твоей темы и этой http://cheat-master.ru/forum/149-675583-4159731-16-1487089899 , почти тоже самое, но у него меньше кода лучше всё разорванно. Как по мне куча всего ненужного и всё вместе.....
Сообщение отредактировал Armadel - Суббота, 29.07.2017, 23:03