[Помощь] Правильное распознавание команды
|
|
Daniel5225 |
Дата: Понедельник, 29.01.2018, 14:42 | Сообщение # 1
|
Новичок
Сообщений: 8
Статус: Offline
|
Имеется участок кода, но при вводе /invite и т.п. этот участок все равно срабатывает, как сделать так, чтобы скрипт реагировал только на /inv? Заранее благодарю
Код #include SAMP.ahk #SingleInstance force
$~Enter:: $~NumpadEnter:: if (isInChat() && !isDialogOpen()) { Sleep 200 dwAddress := dwSAMP + 0x12D8F8 chatInput := readString(hGTA, dwAddress, 256) if chatinput contains /inv { if RegExMatch(chatInput, "/inv (.*)", invt) SendChat("/do На спине висит рюкзак") Sleep, 1000 SendChat("/me достал форму из рюкзака и передал человеку напротив") Sleep, 1000 SendChat("/anim 21") Sleep, 1000 SendChat("/invite " invt1) Sleep, 1000 SendChat("/me внес человека в список сотрудников на КПК") Sleep, 1000 nameinv := RegExReplace(getPlayerNameById(invt1),"_"," ") SendChat("/r [" tag "] " nameinv " был признан годным для прохождения военной службы") } if chatinput contains /razborkaak { Sleep 1000 Sleep 1000 SendChat( zvan " " fam " к разборке АК-47 приступил") sleep 3000 SendChat("/me отделил магазин, снял с предохранителя и перезарядил") Sleep 3000 SendChat("/me поставил автомат на рукоятку и нажал на курок") Sleep 3000 SendChat("/me вытащил шомпол и выкрутил пламегаситель,затем опустил автомат") Sleep 3000 SendChat("/me снял крышку ствольной коробки и вытащил возвратный механизм") sleep 3000 SendChat("/me вытащил затвор с затворной рамой и отделил их от друг друга") sleep 3000 SendChat("/me вытащил газовую камеру") sleep 3000 SendChat( zvan " " fam " разборку закончил!.") sleep 3000 } if chatinput contains /sborkaak { Sleep 1000 SendChat( zvan " " fam " сборку АК-47 начал!") sleep 3000 SendChat("/me присоеденил газовую трубку к корпусу автомата") sleep 3000 SendChat("/me присоденил затвор к раме, вставил всё в автомат") sleep 3000 SendChat("/me присоеденил возвратный механизм") sleep 3000 SendChat("/me закрыл ствольную коробку крышкой ствольной коробки") sleep 3000 SendChat("/me поставил автомат на рукоятку и вставил шомпол") sleep 3000 SendChat("/me закрутил пламегаситель") sleep 3000 SendChat("/me нажал на спусковой крючок") sleep 3000 SendChat("/me поставил автомат на предохранитель.") sleep 3000 SendChat( zvan " " fam " сборку АК-74 закончил!.") sleep 3000 } } Return
|
|
|
|
Toopie |
Дата: Понедельник, 29.01.2018, 16:29 | Сообщение # 2
|
Боец
Сообщений: 122
Статус: Offline
|
Код #include SAMP.ahk #SingleInstance force
$~Enter:: $~NumpadEnter:: if (isInChat() && !isDialogOpen()) { blockChatInput() Sleep, 130 dwAddress := dwSAMP + 0x12D8F8 chatInput := readString(hGTA, dwAddress, 256) unblockChatInput() Sleep, 30 if (RegExMatch(chatInput, "^\/inv\s(\d+)$", item)) { SendChat("/do На спине висит рюкзак") Sleep, 1000 SendChat("/me достал форму из рюкзака и передал человеку напротив") Sleep, 1000 SendChat("/anim 21") Sleep, 1000 SendChat("/invite " item1) Sleep, 1000 SendChat("/me внес человека в список сотрудников на КПК") Sleep, 1000 SendChat("/r [" tag "] " RegExReplace(getPlayerNameById(item1), "_"," ") " был признан годным для прохождения военной службы") } else { SendChat(chatInput) } } return
лучший в мире самп сервер 185.159.129.71:7777 лидерки админки да
|
|
|
|
Daniel5225 |
Дата: Понедельник, 29.01.2018, 17:23 | Сообщение # 3
|
Новичок
Сообщений: 8
Статус: Offline
|
Цитата Toopie ( ![Ссылка на цитируемый текст](/.s/img/fr/ic/4/lastpost.gif) ) if (RegExMatch(chatInput, "^\/inv\s(\d+)$", item)) { Можно поподробнее про ^\/ и \s(\d+)$? Не совсем понятно, для чего это.
Сообщение отредактировал Daniel5225 - Понедельник, 29.01.2018, 17:24 |
|
|
|
Toopie |
Дата: Понедельник, 29.01.2018, 23:15 | Сообщение # 4
|
Боец
Сообщений: 122
Статус: Offline
|
Daniel5225, это называется регулярные выражения) Смотри: 1) ^ - это означает начало строки, например: дана строка test, если поставить RegExMatch(var, "est"), то регулярное выражение найдет test, а если написать RegExMatch(var, "^est"), то уже ничего не будет, потому что условие прописано, как: (без ^) - найти строку est, а если стоит ^, то условие таково: найти строку с началом est. 2) \/ - в регулярных выражениях есть спец.символы, например: \, /, ., [, ], и т.д., чтобы эти символы читались, как обычные, а не служебные, ставится \, это означает, что вышеперечисленные символы будут считаться простыми, а не служебными. 3) \s - это пробел (SPACE), тоже служебный символ, пишется \s, \s+ - если надо задать много пробелов. 4) (\d+) - это значит, что будет стоять одно число, а символ "+" означает, что может стоять число от 0 до 999999.... (\d+) взято в скобки, как видишь, это значит, что цифра берется в переменную, если написать без (), то \d+ не будет взято в переменную, это делается в тех случаях, когда тебе не требуется брать определенный фрагмент текста, например: test123, регулярное выражение: ^test(\d+)$ - в item1 вернет 123, если сделать: ^test\d+$ - переменная item1 будет пустая. 5) $ - это означает конец строки, полная противоположность ^, если не указан параметр $: текст: test1222, регулярка: ^test1222r, вернет test1222rrrr, если указать $: ^test1222$, то ничего не вернет, потому что после 1222 есть продолжение rrrr. На последок - поискал специально для новичков, все ясно и понятно - https://netpeak.net/ru/blog/kak-novichku-razobratsya-v-regulyarnyh-vyrazheniyah/ Если будут вопросы - обращайся)
лучший в мире самп сервер 185.159.129.71:7777 лидерки админки да
|
|
|
|
|
Toopie |
Дата: Вторник, 30.01.2018, 16:58 | Сообщение # 6
|
Боец
Сообщений: 122
Статус: Offline
|
Phoenixxx_Czar, \s табуляция? Смешно. Прогули про \t. На счёт '?' - переводится как -'возможно не будет'...
лучший в мире самп сервер 185.159.129.71:7777 лидерки админки да
|
|
|
|
|
Toopie |
Дата: Вторник, 30.01.2018, 22:21 | Сообщение # 8
|
Боец
Сообщений: 122
Статус: Offline
|
Phoenixxx_Czar, спорить дальше смысла нет, ибо могу получить рид онли. На последок:
Регулярка: test(?:\d+) Перевод: После текста test могут идти цифры, но могут и не идти
лучший в мире самп сервер 185.159.129.71:7777 лидерки админки да
|
|
|
|
|
Toopie |
Дата: Среда, 31.01.2018, 00:06 | Сообщение # 10
|
Боец
Сообщений: 122
Статус: Offline
|
Phoenixxx_Czar, может, потому что знаю, что пишу?) Все, это точно последнее сообщение, захочешь общаться - пиши в ЛС. Ты сам только что показал, что "?" - это вероятность.
лучший в мире самп сервер 185.159.129.71:7777 лидерки админки да
|
|
|
|
Artur_iOS |
Дата: Среда, 31.01.2018, 15:17 | Сообщение # 11
|
Боец
Сообщений: 94
Статус: Offline
|
Toopie, ты не прав. В целом правильно говоришь про ?, но есть исключения в скобках. https://developer.mozilla.org/ru....ntheses
Сообщение отредактировал Artur_iOS - Среда, 31.01.2018, 22:58 |
|
|
|