[Помощь] Не работает командный процессор с выбором в диалоге
|
|
Bogdan_Brody |
Дата: Понедельник, 06.08.2018, 02:56 | Сообщение # 1
|
Любитель
Сообщений: 41
Статус: Offline
|
Здравствуйте народ. Возникла проблема крч, использую Command Processor от Demy и систему диалогов от Phoenixxx_Czar и они не дружат друг с другом, командный процессор перестает работать из-за повторного ~entera в системе диалогов, можно вообще как-то пофиксить?
Код #NoEnv #SingleInstance #Include samp.ahk #If WinActive("GTA:SA:MP") #If CMD.SwitchOn() Class CMD { Static Status := 0 Static List := {}
; CMD.Register("command","testFunc") - The second parameter is a function ; CMD.Register("command","testFunc",testObject) - The second parameter is a method Register(Command,Function, Object := "") { If ( IsObject(Object) ) { Function := ObjBindMethod(Object,Function) CMD.List[Command] := Function return 0 } else if ( IsFunc(Function) ) { CMD.List[Command] := Function return 0 } else return 1 } SwitchOn() { If ( !CMD.Status ) { Static Function := ObjBindMethod(CMD,"Check") Hotkey, If, WinActive("GTA:SA:MP") Hotkey, ~Enter,% Function, On, UseErrorLevel CMD.Status := ( ErrorLevel == 0 ) ? "1" : "0" return ErrorLevel } else return 1 } SwitchOff() { If ( CMD.Status != 0 ) { Hotkey, If, WinActive("GTA:SA:MP") Hotkey, ~Enter, Off, UseErrorLevel CMD.Status := ( ErrorLevel == 0 ) ? "0" : "1" return ErrorLevel } else return 1 } Check() { If ( isInChat() ) { KeyWait, Enter sleep 150 Input := readString(hGTA, dwSAMP + 0x12D8F8, 256) If ( SubStr(Input,1,1) == "/" && RegExMatch(Input,"(\w+)", Command, 2) && CMD.List[Command] ) { writeString(hGTA, dwSAMP + 0x12D8F8, "") Function := CMD.List[Command], Arguments := StrSplit(SubStr(Input,3+StrLen(Command),StrLen(Input)-2-StrLen(Command))," ") While ( Arguments.Length() < IsFunc(Function) ) Arguments.Push("") %Function%(Arguments*) } } } } CMD.Register("gt", "getinfo")
#IfWinActive GTA:SA:MP ;============================================= ; Обнуление переменной при нажатии ESC и F6 ;============================================= ~ESC:: ~F6:: menu:=0 return
;============================================= ; Кнопки вызова диалогов ;============================================= F3:: menu := 1 ShowDialog(2, "Диалог 1", "Первая`nВторая", "X") return F4:: menu := 2 ShowDialog(2, "Диалог с подменю", "Лекции`nПункт без доп. меню", "X") return
~LButton:: Time := A_TickCount while(isDialogOpen()) { if (A_TickCount - Time > 500) { Return } } checkdialogMenu: if (isDialogButtonSelected() == 1) { menu := 0 } ifWinNotActive, GTA:SA:MP { return }
;============================================= ; Проверка на активное меню ;============================================= if (menu == 1) { menu := 0 line_num := getDialogLineNumber() line_text := getDialogLine(line_num)
addChatMessage("Выбрано: " line_text) return } else if (menu == 2) { menu := 0 line_num := getDialogLineNumber() line_text := getDialogLine(line_num)
if (line_num == 1) { showDialog(2, "Подменю", "Первый пукнкт`nВторой пункт", "X") menu := 3 } else if (line_num == 2) addChatMessage("Выбрано: " line_text) return } else if (menu == 3) { menu := 0 line_num := getDialogLineNumber() line_text := getDialogLine(line_num)
addChatMessage("В подменю выбрано: " line_text) return } return
~Enter:: gosub, checkdialogMenu return
;// Дополнение к командам getinfo(pid) { if(pid == "" || pid == " ") { addChatMessageEx(0xffffff, "Неправильно указан id игрока") } else { name := getPlayerNameById(pid) level := getPlayerScoreById(pid) ping := getPlayerPingById(pid) skin := getTargetPlayerSkinIdById(pid) showDialog(0, "Информация об игроке", "Ник: " name " [id: " pid "]`nУровень: " level "`nПинг: " ping "`nСкин id: " skin ,"Закрыть") } } return
|
|
|
|
MrGPro |
Дата: Понедельник, 06.08.2018, 09:55 | Сообщение # 2
|
Боец
Сообщений: 202
Статус: Offline
|
Это набросок кода (только нужно исправлять код ; Проверка на активное меню если хотите мульти-диалог создать при выборе открывать новый нужный) он с багами немножко =В
Код #Include SAMPUDF.ahk #NoEnv #SingleInstance #If WinActive("GTA:SA:MP") #If CMD.SwitchOn() Class CMD { Static Status := 0 Static List := {}
; CMD.Register("command","testFunc") - The second parameter is a function ; CMD.Register("command","testFunc",testObject) - The second parameter is a method Register(Command,Function, Object := "") { If ( IsObject(Object) ) { Function := ObjBindMethod(Object,Function) CMD.List[Command] := Function return 0 } else if ( IsFunc(Function) ) { CMD.List[Command] := Function return 0 } else return 1 } SwitchOn() { If ( !CMD.Status ) { Static Function := ObjBindMethod(CMD,"Check") Hotkey, If, WinActive("GTA:SA:MP") Hotkey, ~Enter,% Function, On, UseErrorLevel CMD.Status := ( ErrorLevel == 0 ) ? "1" : "0" return ErrorLevel } else return 1 } SwitchOff() { If ( CMD.Status != 0 ) { Hotkey, If, WinActive("GTA:SA:MP") Hotkey, ~Enter, Off, UseErrorLevel CMD.Status := ( ErrorLevel == 0 ) ? "0" : "1" return ErrorLevel } else return 1 } Check() { If ( isInChat() ) { KeyWait, Enter sleep 150 Input := readString(hGTA, dwSAMP + 0x12D8F8, 256) If ( SubStr(Input,1,1) == "/" && RegExMatch(Input,"(\w+)", Command, 2) && CMD.List[Command] ) { writeString(hGTA, dwSAMP + 0x12D8F8, "") Function := CMD.List[Command], Arguments := StrSplit(SubStr(Input,3+StrLen(Command),StrLen(Input)-2-StrLen(Command))," ") While ( Arguments.Length() < IsFunc(Function) ) Arguments.Push("") %Function%(Arguments*) } } } } CMD.Register("gt", "getinfo")
;============================================= ; Обнуление переменной при нажатии ESC и F6 ;============================================= ~ESC:: ~F6:: menu:=0 return
;============================================= ; Кнопки вызова диалогов ;============================================= F3:: menu := 1 ShowDialog(2, "Диалог 1", "Первая`nВторая", "X") SetTimer, checkdialogMenu, On return
F4:: menu := 2 ShowDialog(2, "Диалог с подменю", "Лекции`nПункт без доп. меню", "X") return
checkdialogMenu: while (isDialogOpen()) { CMD.SwitchOff() Time := A_TickCount while(isDialogOpen() and Time < 500) { if (A_TickCount - Time > 500) { Return } } if (GetKeyState("Enter", "P") or GetKeyState("LButton", "P") or (isDialogButtonSelected() and GetKeyState("LButton", "P"))) { Sleep 100 if (isDialogButtonSelected() == 1) { menu := 0 } ifWinNotActive, GTA:SA:MP { return }
;============================================= ; Проверка на активное меню ;============================================= if (menu == 0) { line_num := getDialogLineNumber() menu := 0 ; or line_num line_text := getDialogLine(line_num)
addChatMessage("Выбрано: " line_text) return } else if (menu == 1) { menu := 0 line_num := getDialogLineNumber() line_text := getDialogLine(line_num)
if (line_num == 1) { showDialog(2, "Подменю", "Первый пукнкт`nВторой пункт", "X") menu := 3 } else if (line_num == 2) addChatMessage("Выбрано: " line_text) return } else if (menu == 1) { menu := 0 line_num := getDialogLineNumber() line_text := getDialogLine(line_num)
if (line_num == 1) { showDialog(2, "Подменю", "Первый пукнкт`nВторой пункт", "X") menu := 3 } else if (line_num == 2) addChatMessage("Выбрано: " line_text) return } else if (menu == 3) { menu := 0 line_num := getDialogLineNumber() line_text := getDialogLine(line_num)
addChatMessage("В подменю выбрано: " line_text) return } } } sleep, 100 SetTimer, checkdialogMenu, Off CMD.SwitchOn() return
;// Дополнение к командам getinfo(pid) { if(pid == "" || pid == " ") { addChatMessageEx(0xffffff, "Неправильно указан id игрока") } else { name := getPlayerNameById(pid) level := getPlayerScoreById(pid) ping := getPlayerPingById(pid) skin := getTargetPlayerSkinIdById(pid) showDialog(0, "Информация об игроке", "Ник: " name " [id: " pid "]`nУровень: " level "`nПинг: " ping "`nСкин id: " skin ,"Закрыть") } } return
Тебе помогли не забывай про благодарность >> тыкни репутацию ---------------------------------------͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏ ----------------------------------------------------- Зам.Администратора на проекте "DayZ Epoсh SPN" сервер Arma 2OA DayZ Epoch пиратка и лицензия
Сообщение отредактировал MrGPro - Понедельник, 06.08.2018, 09:55 |
|
|
|
|
Bogdan_Brody |
Дата: Вторник, 07.08.2018, 02:19 | Сообщение # 4
|
Любитель
Сообщений: 41
Статус: Offline
|
Цитата Phoenixxx_Czar ( ) я бы лучше КП от тумкина использовал Оно то прикольно, но команды даже с КП тумкина все также не работают из-за повторного юза ~Enter
|
|
|
|
|