Помогите с Диологом с выбором

Статус
В этой теме нельзя размещать новые ответы.

Andrey _Simonich

Новичок
Автор темы
14
0
Надо сделать так что-бы когда высметивался диолог по команде /новости
Была табличка и там выборы например РП отыгровка Открытие двери и ты кликаешь на выриант и РП отыгрывается.
Надеюсь понятно.
 

Kvisk

Известный
205
209
И так, взял пример из своего телепорта. Данный диалог работает только с одной кнопкой, что я имею в виду:
Так работать будет:
22728

Так работать не будет:
22727

Диалог поддерживает как и клавиатуру, так и мышку..
Можно нажать: Enter; NumpadEnter; Esc; Левую кнопку мыши: двойной клик по нужной строке или выбрать нужную строку и нажать кнопку.

Вот код, думаю тут всё понятно, если что спрашивай.
AutoHotKey:
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#include sampUDF.ahk

; перезагрузка скрипта
F12::
sleep, 300
reload
return

; блок клавиш
$~LButton::
key = LeftButtonMouse
return
$~esc::
key = Esc
return
$~NumpadEnter::
$~Enter::
key = Enter
return

; вызов диалога
:?`n:/новости::
key = Ошибка ; если диалог как то не правильно закроется, то ничего не произойдёт
; ниже наш диалог
showDialog(2, "{ffff00}Рп отыгровки{aaaaaa} by Kvisk", "1. Первая РП`n2. Вторая РП`n3. Третья РП", "OK", , 9779)
while (isDialogOpen()) ; цикл, который ждёт закрытия диалога
    Continue
sleep, 250
; так же мы сравниваем id диалога, делается это для того, что если открыть с начало наш,
; а потом сервер нам пришлёт свой диалог и мы закроем его. Скрипт не сработал.
if (getDialogID() <> 9779) or (key = "Esc") or (key = "Ошибка") ; как только диалог был закрыт он смотрит как именно он был закрыт
    return
NumberLine := getDialogLineNumber()
goto act_d1_%NumberLine% ; прыгаем на метку с номером строки
return

act_d1_1:
; тут ваша первая отыгровка
addChatMessage("1 строка диалога")
return
act_d1_2:
; тут ваша вторая отыгровка
addChatMessage("2 строка диалога")
return
act_d1_3:
; тут ваша третья отыгровка
addChatMessage("3 строка диалога")
return
Код полностью рабочий, можешь вставить и посмотреть как он работает в игре
 

Andrey _Simonich

Новичок
Автор темы
14
0
И так, взял пример из своего телепорта. Данный диалог работает только с одной кнопкой, что я имею в виду:
Так работать будет:
22728

Так работать не будет:
22727

Диалог поддерживает как и клавиатуру, так и мышку..
Можно нажать: Enter; NumpadEnter; Esc; Левую кнопку мыши: двойной клик по нужной строке или выбрать нужную строку и нажать кнопку.

Вот код, думаю тут всё понятно, если что спрашивай.
AutoHotKey:
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#include sampUDF.ahk

; перезагрузка скрипта
F12::
sleep, 300
reload
return

; блок клавиш
$~LButton::
key = LeftButtonMouse
return
$~esc::
key = Esc
return
$~NumpadEnter::
$~Enter::
key = Enter
return

; вызов диалога
:?`n:/новости::
key = Ошибка ; если диалог как то не правильно закроется, то ничего не произойдёт
; ниже наш диалог
showDialog(2, "{ffff00}Рп отыгровки{aaaaaa} by Kvisk", "1. Первая РП`n2. Вторая РП`n3. Третья РП", "OK", , 9779)
while (isDialogOpen()) ; цикл, который ждёт закрытия диалога
    Continue
sleep, 250
; так же мы сравниваем id диалога, делается это для того, что если открыть с начало наш,
; а потом сервер нам пришлёт свой диалог и мы закроем его. Скрипт не сработал.
if (getDialogID() <> 9779) or (key = "Esc") or (key = "Ошибка") ; как только диалог был закрыт он смотрит как именно он был закрыт
    return
NumberLine := getDialogLineNumber()
goto act_d1_%NumberLine% ; прыгаем на метку с номером строки
return

act_d1_1:
; тут ваша первая отыгровка
addChatMessage("1 строка диалога")
return
act_d1_2:
; тут ваша вторая отыгровка
addChatMessage("2 строка диалога")
return
act_d1_3:
; тут ваша третья отыгровка
addChatMessage("3 строка диалога")
return
Код полностью рабочий, можешь вставить и посмотреть как он работает в игре
Хорошо,а для этого только UDF надо?

И так, взял пример из своего телепорта. Данный диалог работает только с одной кнопкой, что я имею в виду:
Так работать будет:
22728

Так работать не будет:
22727

Диалог поддерживает как и клавиатуру, так и мышку..
Можно нажать: Enter; NumpadEnter; Esc; Левую кнопку мыши: двойной клик по нужной строке или выбрать нужную строку и нажать кнопку.

Вот код, думаю тут всё понятно, если что спрашивай.
AutoHotKey:
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#include sampUDF.ahk

; перезагрузка скрипта
F12::
sleep, 300
reload
return

; блок клавиш
$~LButton::
key = LeftButtonMouse
return
$~esc::
key = Esc
return
$~NumpadEnter::
$~Enter::
key = Enter
return

; вызов диалога
:?`n:/новости::
key = Ошибка ; если диалог как то не правильно закроется, то ничего не произойдёт
; ниже наш диалог
showDialog(2, "{ffff00}Рп отыгровки{aaaaaa} by Kvisk", "1. Первая РП`n2. Вторая РП`n3. Третья РП", "OK", , 9779)
while (isDialogOpen()) ; цикл, который ждёт закрытия диалога
    Continue
sleep, 250
; так же мы сравниваем id диалога, делается это для того, что если открыть с начало наш,
; а потом сервер нам пришлёт свой диалог и мы закроем его. Скрипт не сработал.
if (getDialogID() <> 9779) or (key = "Esc") or (key = "Ошибка") ; как только диалог был закрыт он смотрит как именно он был закрыт
    return
NumberLine := getDialogLineNumber()
goto act_d1_%NumberLine% ; прыгаем на метку с номером строки
return

act_d1_1:
; тут ваша первая отыгровка
addChatMessage("1 строка диалога")
return
act_d1_2:
; тут ваша вторая отыгровка
addChatMessage("2 строка диалога")
return
act_d1_3:
; тут ваша третья отыгровка
addChatMessage("3 строка диалога")
return
Код полностью рабочий, можешь вставить и посмотреть как он работает в игре
Не работает.Херня если чесно
 

darksoor

Известный
674
353
Надо сделать так что-бы когда высметивался диолог по команде /новости
Была табличка и там выборы например РП отыгровка Открытие двери и ты кликаешь на выриант и РП отыгрывается.
Надеюсь понятно.

Более понятный и правильный код.
Забил команду /новости. По данной команде создатся диалог, который ты можешь подкорректировать как тебе нужно.
AutoHotKey:
#Include SAMP-UDF.ahk ;подключаешь SAMP-UDF (создаёшь рядом со своим скриптом файлик SAMP-UDF.ahk, после переходишь в тему "https://blast.hk/threads/20318/"(без кавычек) и копируешь в данный файл код)

~ESC::
~F6::
menu:=0
return

~LButton::
if (A_PriorHotkey <> "~LButton" or A_TimeSincePriorHotkey > 500)
{
    KeyWait, LButton
    return
}
checkdialogMenu:
ifWinNotActive, GTA:SA:MP
{
    return
}
if (menu == 1)
{
    menu := 0
    line_num  := getDialogLineNumber()
    line_text  := getDialogLine(line_num)
    if (line_num == 1)
    {
        SendChat("1 строка")
    }
    else if (line_num == 2)
    {
        SendChat("2 строка")
    }
    else if (line_num == 3)
    {
        SendChat("3 строка")
    }
    else if (line_num == 4)
    {
        SendChat("4 строка")
    }
    return
}
Return

~NumpadEnter::
~Enter::
gosub, checkdialogMenu
if (!isInChat()) || (isDialogOpen() && (getDialogStyle() == 1 || getDialogStyle() == 3))
   Return
Sleep 250
tempText := readString(hGTA, dwSAMP + 0x12D8F8, 256)
if (tempText == "/новости")
{
     Goto, my_dialog
     Return
}
; Сюда вставлять иные команды
Return

my_dialog:
menu := 1
text =
(
{808080}1. {ffffff}Первая строка
{808080}2. {ffffff}Вторая строка
{808080}3. {ffffff}Третья строка
{808080}4. {ffffff}Четвертая строка
)
ShowDialog(2, "Диалог 1", text, "Выбрать")
return
 

Smer4

Известный
424
51
Более понятный и правильный код.
Забил команду /новости. По данной команде создатся диалог, который ты можешь подкорректировать как тебе нужно.
AutoHotKey:
#Include SAMP-UDF.ahk ;подключаешь SAMP-UDF (создаёшь рядом со своим скриптом файлик SAMP-UDF.ahk, после переходишь в тему "https://blast.hk/threads/20318/"(без кавычек) и копируешь в данный файл код)

~ESC::
~F6::
menu:=0
return

~LButton::
if (A_PriorHotkey <> "~LButton" or A_TimeSincePriorHotkey > 500)
{
    KeyWait, LButton
    return
}
checkdialogMenu:
ifWinNotActive, GTA:SA:MP
{
    return
}
if (menu == 1)
{
    menu := 0
    line_num  := getDialogLineNumber()
    line_text  := getDialogLine(line_num)
    if (line_num == 1)
    {
        SendChat("1 строка")
    }
    else if (line_num == 2)
    {
        SendChat("2 строка")
    }
    else if (line_num == 3)
    {
        SendChat("3 строка")
    }
    else if (line_num == 4)
    {
        SendChat("4 строка")
    }
    return
}
Return

~NumpadEnter::
~Enter::
gosub, checkdialogMenu
if (!isInChat()) || (isDialogOpen() && (getDialogStyle() == 1 || getDialogStyle() == 3))
   Return
Sleep 250
tempText := readString(hGTA, dwSAMP + 0x12D8F8, 256)
if (tempText == "/новости")
{
     Goto, my_dialog
     Return
}
; Сюда вставлять иные команды
Return

my_dialog:
menu := 1
text =
(
{808080}1. {ffffff}Первая строка
{808080}2. {ffffff}Вторая строка
{808080}3. {ffffff}Третья строка
{808080}4. {ffffff}Четвертая строка
)
ShowDialog(2, "Диалог 1", text, "Выбрать")
return
Что за A_PriorHotkey, A_TimeSincePriorHotkey? для чего они нужны?
 
Статус
В этой теме нельзя размещать новые ответы.