Van Persikov

Мои статейки ни о чём, мне нравится, а кому-то может и понадобится :)
Вернуться в профиль Van Persikov

Рубрика: [AHK плюшки] (ahk 1.1.24.04v + SAMP-UDF.ahk)

#1) 12.06.19г. Комфортное отыгрывание RolePlay игры.
Между тем, сегодня было очень скучно... Ловите штуку для тех, кому лень туда-сюда переводить язык при отыгрывании RP.

Для начала создадим команду, с помощью которой будем открывать чат на русской раскладке (в любом случае):
!4:: ; Мне удобно именно так открывать чат, т.к. у меня ноутбук и постоянно искать F6 и одновременно зажимать Fn не очень каеф
{
SendMessage, 0x50,, 0x4190419,, A ; Данная строка включает русскую раскладку (как именно я не знаю, да и вам не понадобится)
SendInput, {F6}/ ; Введём сплэш, т.к. при отправке текста, начинающегося с него, мы ничего не увидим в чате
}

Затем необходимо обработать ввод текста после нажатия Enter:
~$Enter:: ; Скрипт срабатывает при нажатии Enter`a
{
if (isInChat() = 1 & IsDialogOpen() = 0) ; Функции SAMP-UDF, если не подключили его, то скрипт будет ругаться
{
sleep 150 ; Служебное, вникать не будем
dwAddress := dwSAMP + 0x12D8F8 ; Служебное, вникать не будем
chatInput := readString(hGTA, dwAddress, 256) ; Служебное, вникать не будем
if chatInput contains /
{
RegExMatch(chatinput, "/(.*)", check)
if (check1 = "")
{
AddChatMessage("{00ACC1}> пустая команда, введите текст команды")
return
}
}
; Допустим, что мы ввели: /ьу написал скрипт
if chatInput contains /ьу ; Если наш текст содержит /ьу (/me на русской раскладке)
{
RegExMatch(chatinput, "/ьу (.*)", action) ; Отберём из выведенного текста в чат само действие с /me
if (action1 = "") ; Необязательное действие, но просто поясним пользователю, если он введет пустое действие (/me "здесь нет никакого текста")
AddChatMessage("{00ACC1}> введите текст для команды /me | (/ьу прописал команду)") ; 00ACC1- цвет, выбирайте какой хотите (поисковик в помощь: HEX цвета)
sendChat("/me " action1) ; Введёт в чат /me написал скрипт
}
}
return
}

#2) 13.06.19г. Авторазгрузка на заводе.
Данный скрипт сделает всё за вас. Работа развозчиком металла и топлива хороша, но вот выгрузка на заводе по производству продуктов утомляет, особенно если разгружаются несколько человек.

Меньше болтовни, больше практики:
~$Enter:: ; Начнём с того, что обработаем команду
{

if (isInChat() = 1 & IsDialogOpen() = 0)
{
sleep 150
dwAddress := dwSAMP + 0x12D8F8
chatInput := readString(hGTA, dwAddress, 256)
if chatInput contains /metallsell ; Будем продавать металл на завод
{
if (pWork = "Metall") ; У нас будет глобальная переменная, в которой будем хранить тип задания (металл или топливо). "Metall" значит задание уже выполняется, если значение переменной - "" (пустое значение), то задание не выполняется и его нужно начать
{
SetTimer, pWorkJob, off ; Остановим таймер продажи
AddChatMessage("{9C27B0}Автопродажа металла остановлена")
pWork := "" ; Сообщим скрипту, что закончили работу развозчиком (по крайней мере, на данный момент)
return
}
if (pWork = "") ; Пустое значение, значит мы ещё не приступали к работе и нам нужно разгрузиться
{
SetTimer, pWorkJob, 1500 ; Установим таймер с названием pWorkJob между продажами командой /sellm в 1,5 секунды
pWork := "Metall" ; Сообщим скрипту, что начали продавать металл
AddChatMessage("{9C27B0}Автопродажа металла началась, для остановки введите {E0E0E0}/metallsell {9C27B0}ещё раз")
return
}
}
if chatInput contains /fuelsell ; С топливом аналогично алгоритму с металлом
{
if (pWork = "Fuel")
{
SetTimer, pWorkJob, off
AddChatMessage("{9C27B0}Автопродажа топлива остановлена")
pWork := ""
return
}
if (pWork = "")
{
SetTimer, pWorkJob, 1500
pWork := "Fuel"
AddChatMessage("{9C27B0}Автопродажа топлива началась, для остановки введите {E0E0E0}/fuelsell {9C27B0}ещё раз")
return
}
}
}
}

pWork - у нас глобальная переменная, но мы её ещё не объявили, так давайте сделаем это!
global pWork := "" ; Это необходимо вставить в самом верху скрипта

А вот и сам таймер pWorkJob:
pWorkJob: ; Внимание, одно двоеточие, и это не ошибка, а почему так?
{

SetTimer, pWorkJob, Off ; Остановим таймер
if (pWork = "Metall") ; Если продаём металл:
{
Random, randomnumber, 1, 2 ; Выбираем случайное число (1 или 2) кг металла, которое будем выгружать. Будет срабатывать не всегда, но дабы создать ощущение, что продает игрок, а не машина, примем это как должное
sendchat("/sellm " randomnumber) ; Отправит в чат команду для продажи, при чём sendchat работает "тихо", т.е. игрок может писать в чат, открывать чат, листать TAB, да хоть стоять AFK, скрипт всё равно будет работать как должен
SetTimer, pWorkJob, 1500 ; И делаем это раз в 1,5 секунды
return
}
if (pWork = "Fuel")
{
Random, randomnumber, 1, 4 ; а тут число от 1 до 4, почему - см. комментарий ниже
sendchat("/sellf " randomnumber)
SetTimer, pWorkJob, 1100 ; Практика показала, что количество литров топлива на складе уменьшается быстрее, чем металл, поэтому интервал 1,1 сек
return
}
}

Итого:

Достоинства:
- можно оставить игру и забыть, или сидеть в AFK;
- не надо долбить по клавиатуре и следить за состоянием склада, напрягая зрение;
- продаст всё автоматически, вам только загрузить, привести и включить;
Недостатки:
- могут посчитать за бот (я точно не знаю, я сам пользовался, ничего криминального);

- нельзя стоять долго в AFK, работая с топливом (примерно до 2 минут). Цистерна исчезает.

#3) 14.06.19г. Быстрый и удобный способ для скриншота /team c /c 60.
Думаю, что очень многим игроками понадобится данная фича. При вводе /cteam скрипт автоматически определяет ваш ID, звонит в службу точного времени и показывает отчёт, а затем делает скриншот. И всё это происходит менее, чем за 1 секунду!

Статья будет совсем небольшой, поехали:
~$Enter::
{

if chatInput = /cteam
{
sendChat("/c 060")
sleep 100
sendChat("/team " getId()) ; getId - функция SAMP-UDF, получает ID игрока, у которого запущен скрипт, т.е. ваш
sleep 700 ; в зависимости от скорости интернете возможно придётся увеличивать данную паузу
SendInput, {F8} ; сделаем скриншот стандартным способ (клавиша F8)
return
}
if chatInput = /mteam
{
sendChat("/c 060")
sleep 100
sendChat("/team " getId())
sleep 700
SendInput, {PGDN}
sleep 700
SendInput, {Enter}
sleep 600[/FONT]
SendInput, {F8}
return
}
}

Эх, обожаю короткие статьи, но их будет крайне мало. А что итого:
Достоинства:
- быстро, удобно;
- комфортно;
- простой код;
Недостатки:
- если интернет медленный, придётся ставить больше паузу, либо вообще не пользоваться данной фичей :( (но... я проверял на интернете с пингом под 200 и всё было нормально);
- если используете другую программу для скриншотов, то, возможно, нужно будет сменить клавишу, которая делает скриншот (google в помощь: виртуальные коды клавиш).
День рождения
23.07.2000 (Возраст: 25)
Пол
Мужской

Связь

Ник в игре
Van_Persikov
Сервер
Red

Трофеи

  1. 10

    Популярный

    Присуждается,когда пользователь набрал 25 симпатий
  2. 10

    Торт Адванса

    Получает каждый пользователь в свой день рождения
  3. 1

    Первый

    Присуждается,когда пользователь написал 1 сообщение и активировал аккаунт.
  4. 2

    Я нравлюсь

    Присуждается,когда пользователь получил 1 лайк и его аккаунт активирован
  5. 120

    Защитный

    Присуждается, если пользователь подключил Google Authenticator на форуме.
Назад
Верх