Играя в GTA Online, спасибо карантину, я обратил внимание на погоду, которая шла в игре: дождь, я бы сказал ливень.
Я люблю такую погоду, и когда она начинается в игре, я скорее рад. Но суть не в этом.
Тут меня осенило - как было бы круто, будь погода в игре такой же, как у меня за окном!
Солнце? В игре солнечно. Дождь? И так далее, по аналогии.
Если для реализации этого в GTA Online мне нужно было бы нанимать хакера, который, как минимум, хакнул нубо-рп 3000 раз, то для САМПа я и сам сварганю за пару чашек кофе.
Хоть я сам и не играю уже в САМП, считайте это подгоном специально для вас 😀
Хочу представить вам творение, аналогов которого просто нет.
По старинке, все исходники и мануал по установке на английском языке на моём гитхабе.
Введение
RLWG - смесь Ардуино и АХК. Я считаю, что если использовать AHK для игр, то только в таких проектах. Техническая часть - Arduino Uno, Ethernet Shield и DHT11.
Последнее - это датчик температуры и влаги, который и поможет нам определять текущую обстановку за окном.
Алгоритм
Низкая влага, высокая температура и т.д. Если на часах 9 вечера, нормальная влага и низкая температура - будет пасмурная погода, а то и вовсе дождь. Если в то же время показатели влаги и температуры будут другими - будет и другая погода.
- У нас есть 4 отрезка времени
- К каждому отрезку времени 3 условия на температуру
- К каждому условию температуры 3 условия влаги
Настройка
Нам понадобится Ethernet кабель. Если у вас роутер, один конец втыкаем в него, а другой в Шилд. Если ноут, в принципе то же самое. Это нам необходимо, чтобы создать локальную сеть на нашем вайфае. Заходим на мой гитхаб, качаем прошивку и открываем IDE. В ней необходимо изменить 1 параметр: это локальный IP Шилда. Как его найти:
- Open Arduino IDE
- File - Example codes - Ethernet - DhcpAdressPrinter
C++:
IPAddress ip(192, 168, 0, 70); // Your ethernet local ip.
Заливаем прошивку в ардуинку. Теперь скачиваем исходник AHK и открываем его в блокноте. В нём также меняем локальный ip на свой.
AutoHotKey:
local_ip(192, 168, 0, 70); // Your ethernet local ip.
AutoHotKey:
rechecktime := "5000" // Время опроса ahk скриптом нашего локального сервера. 5 секунд.
wetlist := {low_wet: {low: 20, high: 49}, okey_wet: {low: 50, high: 79}, high_wet: {low: 80, high: 100}}
// Параметр низкой влаги идёт от 20 до 49, средней влаги от 50 до 79, повышенной влаги от 80 до 100.
temperaturelist := {low_temp: {low: -40, high: -1}, okey_temp: {low: 0, high: 25}, high_temp: {low: 26, high: 40}}
// Параметр низкой температуры идёт от -40 до -1, средней температуры от 0 до 25 и повышенной температуры от 26 до 40
AutoHotKey:
; Внутри у нас есть 4 условия на время: от 9 до 17:59, 18 до 20:59, 21 до 23:59, 00:00 до 8:59
if (clocks >= 9 && clocksmin >= 0) && (clocks <= 17 && clocksmin <= 59) { ; 09:00 - 17:59 / Day
// From 8 a.m. to 6 p.m.
; Можно изменить промежуток.
; Внутри каждого из условий есть массив, в каждом условии этот массив разный.
values := {1: {1: 15, 2: 15, 3: 9}, 2: {1: 22, 2: 9, 3: 9}, 3: {1: 7, 2: 16, 3: 8}}
; 1, 2, 3: - это low, okey и high. Температура.
; 1:15, 2: 15, 3: 9 - это low, okey и high влаги и id погоды, которая будет установлена исходя из условий
; Если у нас средняя температура - это okey
; Если у нас высокая влажность - это high
; Поэтому у нас установится погода 9
; Если у нас высокая температура - это high
; Если у нас низкая влажность - это low
; Поэтому у нас установится погода 7
Применение
Итак, у нас 2 параметра: Температура (20 *C) и Влажность (29%). В текущий момент это мои показатели в комнате. В вашем случае, выставьте наш бутерброд на балкон, предварительно запитав батарейкой-другой и свесьте датчик на улицу (для более точного отображения). Вы можете сделать это через переходники ПАПА-МАМА, но в своём случае я взял 2 провода, которые свистнул на практике в колледже, и разрезав на 3 максимально одинаковых отрезка подключил их к ардуинке и датчику с помощью изоленты (карантин, радиомагазины закрыты).
Теперь запускаем RLWG.ahk, не забываем про UDF. Меню никакого нет, в трее есть иконка для управления. Заходим в игру, вероятно погода уже изменилась.
Теперь, при изменении погоды на улице, скрипт изменит её и для вас в игре. Если пойдёт дождь - поднимется влага - пойдёт дождь в игре.
Завершение
Надеюсь, моя реализация воодушевит хотя бы одного читающего эту статью.
Даст понять, что даже во что-то старое можно вдохнуть жизнь (только пожалуйста, хватит клепать копии скриптов на смену погоды, однострочные биндеры и др. шлак)
Напомню, что на гитхабе где и лежат все исходники - есть функция поставить проекту.
Это я так, к слову...
Спасибо что прочитали до конца. Хорошего настроения, здоровья и сил пережить этот карантин!
GITHUB | Email |