Тема: SAMP: Модификация обработчика команд
Здравствуйте, имеется следующий обработчик команд:
$~Enter::
if(!isInChat() || isDialogOpen())
return
blockChatInput(), block := false
Sleep, 150
chat := readString(hGTA, dwSAMP + 0x12D8F8, 256)
s := StrSplit(chat)
if(s[1] == "/")
{
cmd := StrSplit(chat, A_Space)
if(cmd_label := isCommand(cmd[1]))
{
playerid := cmd[2], i := 0, block := true
Loop, 20
param%i% := cmd[i+1], i += 1
unBlockChatInput()
gosub, %cmd_label%
}
}
unBlockChatInput()
if(!block && strlen(chat))
Sendchat(chat)
return
strrest(cmd, n)
{
str := ""
for k, v in cmd
{
if(k > n)
str := str "" v " "
}
return SubStr(str, 1, -1)
}
isCommand(string)
{
Loop, Read, %A_ScriptName%
if RegExMatch(A_LoopReadLine, "command\_(.*)\:", LName)
if SubStr(string, 2) == LName1
return SubStr(LName, 1, -1)
return false
}
callCommand(string, params="")
{
if(cmd_label := isCommand(string))
{
param0 := string, i := 1
Loop, 20
param%i% := params[i], i += 1
gosub, %cmd_label%
}
return true
}
command_afk:
msgbox, режим AFK включен
return
Объясняю для тех, кто не знаком с SAMP. С помощью обработчика команд можно вместо хоткеев создавать команды, которые вводятся в игровой чат (нажимаете F6, вводите в чат /"команда" (напр. /afk) и нажимаете ентер). Если такая команда присутствует в скрипте, то выполняется какое-нибудь действие. Например: последние три строчки моего кода, это регистрация команды /afk. Теперь, если я введу в игровом чате /afk и нажму ентер (это принципиальное отличие от автозамены всеми любимой), то вылезет msgbox. Все работает замечательно, но возникла необходимость в качестве аргумента команде представить какую-нибудь переменную. Например:
Global m := "afk"
command_%m%:
msgbox, режим AFK включен
return
Но как вы уже догадались, мои попытки не увенчались успехом. Никакой известный мне способ вывода переменной сюда не помог. Но я подозреваю, что если как-нибудь изменить функцию isCommand(string) (в примере первом она есть), то можно будет выводить переменные в command. Обращаюсь к вам за помощью: как можно переделать функцию isCommand(string) или как вообще можно использовать переменную m (из второго примера), чтобы она работала в обработчике команд. Любые костыли устраивают, главное результат.