Вопросы по AHK-скриптингу

Mosyana

Новичок
1
0
Подключаешь ком.проц. (на СМе можешь найти). Регистрируешь команду.
Код:
CMD.Register("/rank",giveRank)
giveRank( id, lvl ) {
     static lvlNames = ["Рядового", "Сержанта", "", "", "", "", "", "Мл.Лейтенанта"]
     sendChat("/me передал погоны " lvlNames[lvl] "."
     sleep 1000
     sendChat("/giverank id lvl")
}
Такая штука универсальна и подходит для любого ранга. И не нужно дублировать данные, как в примере выше.
 

RTD

Нестандартное звание
Модератор
391
414
А можешь что-бы не 1 строка в диалоге включала 1 клавишу, а например сразу 5?
AutoHotKey:
active := Object("keys1", false, "vk32", false)
F1::
array := ["Группа клавиш №1`t" (active.keys1 ? "{32CD32}Активны":"{dd0000}Не активны"), "Клавиша 2`t" (active.vk32 ? "{32CD32}Активна":"{dd0000}Не активна")]] ;Группа клавиш №1 к примеру 1 и 3
showDialog(2, "Управление клавишами", ArrayToTextDialog(array), "Ок")
result := LineResult()
if (!result)
    Return
for i, e in active
    if (A_Index = result)
        active[i] := !e
Return
~vk31::
if (!active.keys1)
    return
addChatMessage("Группа клавиш №1 работает")
Return
~vk33::
if (!active.keys1)
    return
addChatMessage("Группа клавиш №1 работает")
Return
~vk32::
if (!active.vk32)
    Return
addChatMessage("2 работает")
Return
 

giovanni1337

Известный
10
0
Подключаешь ком.проц. (на СМе можешь найти). Регистрируешь команду.
Код:
CMD.Register("/rank",giveRank)
giveRank( id, lvl ) {
     static lvlNames = ["Рядового", "Сержанта", "", "", "", "", "", "Мл.Лейтенанта"]
     sendChat("/me передал погоны " lvlNames[lvl] "."
     sleep 1000
     sendChat("/giverank id lvl")
}
Такая штука универсальна и подходит для любого ранга. И не нужно дублировать данные, как в примере выше.
Чёт не смог найти, можешь помочь?
 

Tanaka

Участник
41
10
Чёт не смог найти, можешь помочь?
C++:
#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*)
            }
        }
    }
}
 

Tiva

Известный
76
1
Как сделать чтобы нажимаешь кнопку и у тебя выводится команда и id ближнего человека, только не свой
 

Tiva

Известный
76
1
Добрый день! Подскажите кто знает. Как создать меню похожее на обычное [ /mn ] в SA:MP.
К примеру
Нажимаешь F5 , появляется меню с выбором : Гос новости , ниже уволить игрока , ниже принять .
И далее когда выбираешь какой либо раздел появляется еще меню куда надо вводить к примеру текст для гос.волны 3 Строки будет , или же вводить ид игрока для принятие , вначале идет отыгровка RolePlay , а потом уже и /invte [ id ]
Если выбрать увольнения , то будет такой текст : Введите id игрока и через пробел причину увольнения .
Если поможете буду благодарен .
 

Tiva

Известный
76
1
Выбивает ошибка Unexpected "}" помогите что тут не так?
Код:
#Include samp.ahk

F2::
Showdialog("1", "{FFFAFA}Выберите пункт", "{FFFAFA}[1] - RolePlay`n[2] - Лекции`n[3] - Наказание", "Ok")
input, text, V, {Enter}
Keywait, Enter, D
sleep 300

if (text = 1) {
Showdialog("1", "{FFFAFA}Выберите пункт", "[1]RolePlay`n[2]RolePlay`n[3]RolePlay`n[4]RolePlay`n[5]RolePlay`n[6]RolePlay`n[7]RolePlay`n[8]RolePlay`n[9]RolePlay", "Ok")
} else if (text = 2) {
addchatmessage("{FFFAFA}Привет")
sleep 1100
addchatmessage("Добрый день")
sleep 1100 }
addchatmessage ("/invite")
} else if (text = 3) {
addchatmessage ("/invite")
} else {
addChatMessage("[AHK]: Ошибка. Выберите пункт с помощью цифр 1-3"
}
return
 

Danila_Demidow

Новичок
3
0
Такая проблема, есть два скрипта. Но при запуске пишет, что тип две разные команды на одной клавише. Помогите совместить, надеюсь поняли, что хочу сделать.
$~Enter::
if (isInChat() && !isDialogOpen())
{
Sleep, 200
dwAddress := dwSAMP + 0x12D8F8
chatText := readString(hGTA, dwAddress, 256)
if (RegExMatch(chatText, "^\/lic (.*)", var))
{
Nick := RegExReplace(getPlayerNameById(var1), "_", " ")
Sleep 2500
SendChat("/me достал чистый бланк для лицензий ")
Sleep 4000
SendChat("/me заполнил бланк по паспортным данным: " Nick " ")
Sleep 3000
SendChat("/do в бланке стоит печать: ''With love from Driving School'' ")
Sleep 2000
SendChat("/do Лицензия оформлена на имя: " Nick " ")
Sleep 1100
SendChat("/givelicense " var1 )
}
}
Return

$~Enter::
if (isInChat() && !isDialogOpen())
{
Sleep, 200
dwAddress := dwSAMP + 0x12D8F8
chatText := readString(hGTA, dwAddress, 256)
if (RegExMatch(chatText, "^\/lis (.*)", var))
{
Nick := RegExReplace(getPlayerNameById(var1), "_", " ")
Sleep 1100
SendChat("/do На плече сумка с документами ")
Sleep 3000
SendChat("/me достал из сумки чистый бланк для лицензий ")
Sleep 4500
SendChat("/me заполнил бланк по паспортным данным: " Nick " ")
Sleep 3000
SendChat("/do в бланке стоит печать: ''With love from Driving School'' ")
Sleep 2000
SendChat("/do Лицензия оформлена на имя: " Nick " ")
Sleep 1100
SendChat("/givelicense " var1 )
}
}
Return
 

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,961
Как сделать чтобы нажимаешь кнопку и у тебя выводится команда и id ближнего человека, только не свой
Вот тебе на SCM код. Разбирайся в своём AHK сам.

CLEO:
{$CLEO}
0000:

WHILE 8AFA: NOT SAMP_Loaded
    0001: 0
END

WHILE TRUE
    0001: 0
    IF 0256:   player $PLAYER_CHAR defined
    THEN
        IF 0ADC:   test_cheat "N"
        THEN
            FOR 0@ = TO {MAX_PLAYERS}1004 | STEP = 1 |
                IF 0B23:  samp is_player_connected 0@
                THEN
                    IF 0B20: samp 1@ = actor_handle_by_samp_player_id 0@
                    THEN
                        IF 0104:   actor $PLAYER_ACTOR near_actor 1@ radius 15.0 15.0 15.0 sphere FALSE
                        THEN
                            0AF9: samp say_msg "Игрок %d, рядом с вами." | {ID}0@ |
                            BREAK
                        END
                    END
                END
            END
        END
    END
END