[Помощь] Не работает командный процессор с выбором в диалоге - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Sanoxxx, Alowir, Phoenixxx_Czar  
[Помощь] Не работает командный процессор с выбором в диалоге
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
CZAR Дата: Понедельник, 06.08.2018, 19:19 | Сообщение # 3
Czar Of Scripts
Сообщений: 1373
Статус: Offline
Bogdan_Brody, я бы лучше КП от тумкина использовал smile




Я в ВК
Ушел в веб.

• Ничего не покупаю.
• Способы не проверяю.


У меня теперь новый домен, если ссылка не работает - напишите.

Гарант 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
Bogdan_Brody Дата: Вторник, 07.08.2018, 02:19 | Сообщение # 4
Любитель
Сообщений: 41
Статус: Offline
Цитата Phoenixxx_Czar ()
я бы лучше КП от тумкина использовал

Оно то прикольно, но команды даже с КП тумкина все также не работают из-за повторного юза ~Enter sad
CZAR Дата: Вторник, 07.08.2018, 05:25 | Сообщение # 5
Czar Of Scripts
Сообщений: 1373
Статус: Offline
Bogdan_Brody, там вшить не сложно.. Просто сделать проверку на открытый диалог и если он открыл - переход на метку/функцию.




Я в ВК
Ушел в веб.

• Ничего не покупаю.
• Способы не проверяю.


У меня теперь новый домен, если ссылка не работает - напишите.

Гарант 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
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума
Лучшие пользователи
Admin [39113]

GеNius [7210]

[CM]Russel [5557]

kenlo763 [4952]

[CM]AGRESSOR [4639]

Snake_Firm [4452]

Сэс [4416]

Artem_Buero [4223]

[CM]Durman [3204]

[CM]Рафаэль [3080]

iMaddy [2855]

sky_Woker [2854]

getrekt [2745]

Новые пользователи