[Помощь] Автоматизированное принятие во фракцию.
|
|
Andreyringo1 |
Дата: Четверг, 16.08.2018, 02:49 | Сообщение # 1
|
Новичок
Сообщений: 25
Статус: Offline
|
Возник вопрос как можно реализовать данную функцию, представляю её себе так! Мы чекаем игрока на ЧС с помощью таргета.
Код NickName := getPlayerNameById(getIdByPed(getTargetPed())) if (NickName="") { addChatMessageEx("FF0000", "Ошибка. Прицельтесь на игрока") sleep 100 return } Loop, read, ЧС.txt { IfInString, A_LoopReadLine, %NickName% { addChatMessageEx("FF0000", "Игрок " NickName " находится в ЧС") sleep 2000 return } } addChatMessageEx("00FF00", "Игрок " NickName " не находится в ЧС") sleep 2000 return
Если его нет в ЧС, мы проводим для него собеседование
Код addChatMessageEx("[sobes]: Ты хочешь провести собеседование для игрока " NickName " 1. - Да. 2 - Нет ") Loop, { if (getkeystate("1", "P")) { sendchat("Для собеседования покажите ваши документы, а именно, паспорт, мед.карту и лицензии.") Return } else if (getkeystate("2", "P")) { addChatMessage( "[sobes]: Нет") Return } }
В чём собственно проблема как сделать продолжение собеседования после показа именно 3-х документов, а именно паспорта, мед.карты, лицензий, после просмотра его паспорта мы, чекаем есть ли у игрока 35 законки, если же меньше 35, мы отказываем. Вот как выглядят диалоговые окна.
Мед.карта
Код Имя: Nick_Name
Дата: 30/6/2018 Статус: Полностью здоровый(ая)
{CEAD2A}Наркозависимость: 0{FFFFFF}
Паспорт
Код Имя: {FFD700}Nick_Name {FFFFFF}Лет в штате: {FFD700}1 {FFFFFF}Серия: {FFD700}3132 {FFFFFF}Номер: {FFD700}321243 {FFFFFF}Законопослушность: {FFD700}34/100 {FFFFFF}Семейное положение: {FFD700}[ Женат(а) на Nick_Name ] {FFFFFF}Прописка: {FFD700}[ Дом номер 322 ]{FFFFFF} {FFFFFF}Прописка: {FFD700}[ Дом номер 412 ]{FFFFFF}
{FFFFFF}Работа: {FFD700}None {FFFFFF}Благотворительность: {FFD700}1000000$ {FFFFFF}Военный билет: {FFD700}[ Есть ]{FFFFFF}
{FF6200}Лечился в Психиатрической больнице: 1 раз (Необходимо обновить мед. карту)
Лицензии
Код {FFFFFF}Лицензия на авто: {10F441}Есть {FFFFFF}Лицензия на мото: {10F441}Есть {FFFFFF}Лицензия на полеты: {10F441}Есть {FFFFFF}Лицензия на плавание: {10F441}Есть {FFFFFF}Лицензия на ловлю рыбы: {10F441}Есть {FFFFFF}Лицензия на оружие: {10F441}Есть
Сообщение отредактировал Andreyringo1 - Четверг, 16.08.2018, 02:52 |
|
|
|
slavawar |
Дата: Четверг, 16.08.2018, 11:27 | Сообщение # 2
|
Проверенный
Сообщений: 172
Статус: Offline
|
Можно сделать примерно таким образом:
Код RegExMatch(pass, "{FFFFFF}Законопослушность: {FFD700}(?<num>d+)/100", pass_) RegExMatch(pass, "{CEAD2A}Наркозависимость: (?<num>d+){FFFFFF}", med_) RegExMatch(pass, "{FFFFFF}Лицензия на оружие:\s+{10F441}(?<gan>.*)", lic_)
if (pass_num < 35 || med_num != 0 || lic_gan != "Есть") { SendChat("Извините, мы вынуждены Вам отказать.") }
Желательно опиши подробные критерии тогда скину полный готовый код.
Мои темы: [AHK] Шифратор текста [AHK] Акцент 3 в 1 [C#] Генератор RP ников
|
|
|
|
MrGPro |
Дата: Четверг, 16.08.2018, 12:10 | Сообщение # 3
|
Боец
Сообщений: 202
Статус: Offline
|
slavawar, можно еще проверку открытого диалога через DisDialogOpen() и по названию диалога getDialogCaption()
Код if (getkeystate("1", "P")) { ;sendchat("Для собеседования покажите ваши документы, а именно, паспорт, мед.карту и лицензии.") Loop { if (RegExMatch(getDialogText(), "\{FFFFFF\}Законопослушность: \{FFD700\}(?<lvl>\d+)\/100", zakon_)) { if (zakon_lvl < 35 ) addChatMessageEx("FFFFFF", "Отказано! Ваша Законопослушность: " zakon_lvl ", для вступления необходимо 35 и более") return } } Return } }
=D отучаем потихоньку всех от обычной конструкции (....) с переменными match, match2.... в RegExMatch в более понятную для редактирования key_ (?<subKey>...)
Тебе помогли не забывай про благодарность >> тыкни репутацию ---------------------------------------͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏ ----------------------------------------------------- Зам.Администратора на проекте "DayZ Epoсh SPN" сервер Arma 2OA DayZ Epoch пиратка и лицензия
Сообщение отредактировал MrGPro - Четверг, 16.08.2018, 12:15 |
|
|
|
Andreyringo1 |
Дата: Четверг, 16.08.2018, 12:23 | Сообщение # 4
|
Новичок
Сообщений: 25
Статус: Offline
|
slavawar, В общем приходит человек на собеседование, мы по таргету вычисляем его id , после чего в чат идёт сообщение по типу : "Для собеседования мне нужны ваши документы, а именно паспорт, лицензии, мед.карта" После того как нам игрок их показал, и если у него в паспорт больше чем 35 законки, мы продолжаем для него собеседование, если же меньше 35, мы ему отказываем.
|
|
|
|
slavawar |
Дата: Пятница, 17.08.2018, 14:46 | Сообщение # 5
|
Проверенный
Сообщений: 172
Статус: Offline
|
Цитата MrGPro ( ) =D отучаем потихоньку всех от обычной конструкции (....) с переменными match, match2.... в RegExMatch в более понятную для редактирования key_ (?<subKey>...) То намного удобнее) Andreyringo1, А когда он показывает, у вас отображаются данные диалогом или в чате все таки? Если диалог, то вам нужно сделать некий цикл который будет следить за диалоговыми окнами и считывать сам от туда данные и потом уже сверять) Если случай с чатом там немного проще, после того как он все показать, нажимаете любую клавишу и используете тот код который я Вам показал. Мой пример не будет уместен для диалоговых окон.Добавлено (17.08.2018, 17:17) --------------------------------------------- MrGPro, забыл сказать, в данном случае
Код f (zakon_lvl < 35 ) addChatMessageEx("FFFFFF", "Отказано! Ваша Законопослушность: " zakon_lvl ", для вступления необходимо 35 и более") return }
Лучше будет сделать вот так:
Код if (RegExMatch(getDialogText(), "\{FFFFFF\}Законопослушность: \{FFD700\}(?<lvl>\d+)\/100", zakon_) && zakon_lvl < 35) { SendChat("Отказано! Ваша Законопослушность: " zakon_lvl ", для вступления необходимо 35 и более") }
И раз уж там Loop, break - будет более уместен. А сам return уже в конце блока самого лупа.
Мои темы: [AHK] Шифратор текста [AHK] Акцент 3 в 1 [C#] Генератор RP ников
|
|
|
|