[Разработка] [С.У.Д]> Система Управления Диалогами by MrGPro - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Sanoxxx, Alowir, Phoenixxx_Czar  
[Разработка] [С.У.Д]> Система Управления Диалогами by MrGPro
MrGPro Дата: Воскресенье, 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,


Код
#include SAMP.ahk
#MaxHotkeysPerInterval

; Массивы диалогов
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Закрыть - для закрытия диалога"] ; Задаём текс диалога

global dBut1 :=    ["Ок", "Ок", "Ок", "Выполнить", "Ок", "null", "Ок", "Выполнить", "Ок", "Закрыть"] ; Диалоговая кнопка 1
global dBut2 :=    ["Закрыть", "Закрыть", "Закрыть", "Закрыть", "Закрыть", "null", "Закрыть", "Закрыть", "Закрыть", ""] ; Диалоговая кнопка 2

global CmdBut1 :=  ["null|CmdDialog_1", "null|null|CmdDialog_2", "", "", "", "", "", "", "", ""] ; Команда куда будем прыгать после нажатия gosub marker | marker: { code } return

ControlShowDialog(dialogName, index="null", LButton="2", Enter="0")
{
; Autor: MrGPro
; More :  http://cheat-master.ru/forum/149-704831-1
    static history := []
    static fist
    static break_out
    static fullexit := 0
    static deact := 0
    static marcer := false
    static linesDialog
    static objLinesCMD := 0
    static theSplitText
    static selectLineCMD
    static selectCMD
    static openDialog
    static nextDialog
    
    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])
   }
     
  }
    }
  
    }
    break_out := false
    fist := false
    return
}

F3:: ; Кнопка вызова диалога
ShowDialog(dStyle[1], dName[1], dText[1], dBut1[1], dBut2[1]) ; Диалог
ControlShowDialog("[С.У.Д] by MrGPro", 1, 2, 1)
return

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
Armadel Дата: Понедельник, 24.07.2017, 20:27 | Сообщение # 2
Новичок
Сообщений: 19
Статус: Offline
MrGPro, Не знаю почему, но у меня перестал зависать самп, при открытии диалога, раньше по кд зависал.
1 Вопрос: Это баг или Так надо ? что после нажатия на кнопку закрыть скрипт ждёт 2 нажатия пкм и затем переходит по той строке которая была выбрана ?
Omicida Дата: Понедельник, 24.07.2017, 22:10 | Сообщение # 3
Любитель
Сообщений: 32
Статус: Offline
Было бы неплохо, если б нажатия осуществлялись не только ЛКМ, но и энтером.
MrGPro Дата: Среда, 26.07.2017, 19:20 | Сообщение # 4
Боец
Сообщений: 202
Статус: Offline
Armadel, 1. Хз магия наверное а зависала при открытии фейк диалога или на сервере
2. Тег [Разработка] видел функция в разработке 2й лкм сделал для тестирования во избежания открытия не того диалога кнопки не реализованы пока.
Omicida, Добавил и поправил

Добавлено (26.07.2017, 19:20)
---------------------------------------------
UPDATE: Работают кнопки диалога, мульти создание диалогов, управление Esc, мышка, enter, внедрены cmd и не только.


Тебе помогли не забывай про благодарность >> тыкни репутацию
---------------------------------------͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏ -----------------------------------------------------
Зам.Администратора на проекте "DayZ Epoсh SPN" сервер Arma 2OA DayZ Epoch пиратка и лицензия
tumkin Дата: Четверг, 27.07.2017, 17:57 | Сообщение # 5
Tumkin Project
Сообщений: 1186
Статус: Offline
Честно, не думаю что это нужно выкладывать в открытый доступ. Так как тут все ужаснова-то сделано. Подобные системы принято делать используя ООП. И для работы с диалогами должен быть создан простой "интерфейс".

Armadel Дата: Суббота, 29.07.2017, 23:02 | Сообщение # 6
Новичок
Сообщений: 19
Статус: Offline
MrGPro, Я до сих пор не могу понять в чём разница твоей темы и этой http://cheat-master.ru/forum/149-675583-4159731-16-1487089899 , почти тоже самое, но у него меньше кода лучше всё разорванно.
Как по мне куча всего ненужного и всё вместе.....


Сообщение отредактировал Armadel - Суббота, 29.07.2017, 23:03
  • Страница 1 из 1
  • 1
Поиск: