Razi Опубликовано 24 декабря, 2016 Поделиться Опубликовано 24 декабря, 2016 Помогите дописать скрипт на языке Lua. Скрипт рабочий только на половину. Потому что Lua почти незнаю. Вот скрипт: Скрытый текст [ENABLE] {$LUA} timer = createTimer(true) timer:setInterval(50) timer.OnTimer = function() value1 = readBytes('00A444E8',1) value2 = readBytes('00A443DF',1) if (value1 == 88) then writeBytes('00A444E8',72) else if (value1 == 72) then if (value2 == 1) then writeBytes('009EA0D8',114) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',115) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) end end if (value1 == 24) then writeBytes('00A444E8',8) else if (value1 == 8) then if (value2 == 1) then writeBytes('009EA0D8',114) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',115) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) end else if (value1 == 72) then if (value2 == 2) then writeBytes('009EA0D8',116) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',117) writeBytes('009EA0E5',19) writeBytes('009EA0E6',1) end else if (value1 == 8) then if (value2 == 2) then writeBytes('009EA0D8',116) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',117) writeBytes('009EA0E5',19) writeBytes('009EA0E6',1) end else if (value1 == 72) then if (value2 == 3) then writeBytes('009EA0D8',118) writeBytes('009EA0DD',23) writeBytes('009EA0DE',1) writeBytes('009EA0E0',119) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) end else if (value1 == 8) then if (value2 == 3) then writeBytes('009EA0D8',118) writeBytes('009EA0DD',23) writeBytes('009EA0DE',1) writeBytes('009EA0E0',119) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) end end end end end end end end end {$ASM} [DISABLE] {$LUA} timer:setEnabled(false) В общем условия в скрипте такие: сначала если value1 = 88 то меняется это же значение на 72 если value1 = 24 то меняется это же значение на 8 Дальше если value1 = 72 и value2 = 1 то идет запись значений №1 если value1 = 8 и value2 = 1 то идет запись значений №1 далее если value1 = 72 и value2 = 2 то идет запись значений №2 если value1 = 8 и value2 = 2 то идет запись значений №2 далее если value1 = 72 и value2 = 3 то идет запись значений №3 если value1 = 8 и value2 = 3 то идет запись значений №3 Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 24 декабря, 2016 Поделиться Опубликовано 24 декабря, 2016 Скрытый текст if value1 == 88 then value = 72 elseif value1 == 24 then value1 = 8 end if value1 == 72 then if value2 == 1 then --запись чего-то там 1 elseif value2 == 2 then --запись чего-то там 2 elseif value2 == 3 --запись чего-то там 3 end elseif value1 == 8 then if value2 == 1 then --запись чего-то там 1 elseif value2 == 2 then --запись чего-то там 2 elseif value2 == 3 --запись чего-то там 3 end end 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 24 декабря, 2016 Автор Поделиться Опубликовано 24 декабря, 2016 (изменено) Счас напишу или работает скрипт. Изменено 24 декабря, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 24 декабря, 2016 Автор Поделиться Опубликовано 24 декабря, 2016 (изменено) Проверил скрипт работает. Вот пример рабочего скрипта: Скрытый текст [ENABLE] {$LUA} timer = createTimer(true) timer:setInterval(50) timer.OnTimer = function() value1 = readBytes('00A444E8',1) value2 = readBytes('00A443DF',1) if value1 == 88 then writeBytes('00A444E8',72) elseif value1 == 24 then writeBytes('00A444E8',8) end if value1 == 72 then if value2 == 1 then writeBytes('009EA0D8',114) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',115) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) elseif value2 == 2 then writeBytes('009EA0D8',116) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',117) writeBytes('009EA0E5',19) writeBytes('009EA0E6',1) elseif value2 == 3 then writeBytes('009EA0D8',118) writeBytes('009EA0DD',23) writeBytes('009EA0DE',1) writeBytes('009EA0E0',119) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) end elseif value1 == 8 then if value2 == 1 then writeBytes('009EA0D8',114) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',115) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) elseif value2 == 2 then writeBytes('009EA0D8',116) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',117) writeBytes('009EA0E5',19) writeBytes('009EA0E6',1) elseif value2 == 3 then writeBytes('009EA0D8',118) writeBytes('009EA0DD',23) writeBytes('009EA0DE',1) writeBytes('009EA0E0',119) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) end end end {$ASM} [DISABLE] {$LUA} timer:setEnabled(false) Еще хочу доделать к этому скрипту: если value1 = 88 то меняется это же значение на 72 если value1 = 24 то меняется это же значение на 8 Дальше если value1 = 72 и value2 = 1 то идет запись значений №1 если value1 = 72 и value2 = 2 то идет запись значений №2 если value1 = 72 и value2 = 3 то идет запись значений №3 если value1 = 72 и если value3 = 45 и если value4 = 45 то идет запись значений №4 -- вот это условие добавлено далее если value1 = 8 и value2 = 1 то идет запись значений №1 если value1 = 8 и value2 = 2 то идет запись значений №2 если value1 = 8 и value2 = 3 то идет запись значений №3 если value1 = 8 и если value3 = 45 и если value4 = 45 то идет запись значений №4 -- вот это условие добавлено Вот написал скрипт и он работает вроде, но незнаю проверяет ли скрипт value4 в обоих случаях с значениями 72 и 8. Подскажите если скрипт неправильно написан: Скрытый текст [ENABLE] {$LUA} timer = createTimer(true) timer:setInterval(50) timer.OnTimer = function() value1 = readBytes('00A444E8',1) value2 = readBytes('00A443DF',1) value3 = readBytes('009B583F',1) value4 = readBytes('009B59E7',1) if value1 == 88 then writeBytes('00A444E8',72) elseif value1 == 24 then writeBytes('00A444E8',8) end if value1 == 72 then if value2 == 1 then writeBytes('009EA0D8',114) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',115) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) elseif value2 == 2 then writeBytes('009EA0D8',116) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',117) writeBytes('009EA0E5',19) writeBytes('009EA0E6',1) elseif value2 == 3 then writeBytes('009EA0D8',118) writeBytes('009EA0DD',23) writeBytes('009EA0DE',1) writeBytes('009EA0E0',119) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) elseif value3 == 45 then -- вот это условие добавлено if value4 == 45 then -- вот это условие добавлено, но правильно ли writeBytes('009EA0D8',112) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',113) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) end end elseif value1 == 8 then if value2 == 1 then writeBytes('009EA0D8',114) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',115) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) elseif value2 == 2 then writeBytes('009EA0D8',116) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',117) writeBytes('009EA0E5',19) writeBytes('009EA0E6',1) elseif value2 == 3 then writeBytes('009EA0D8',118) writeBytes('009EA0DD',23) writeBytes('009EA0DE',1) writeBytes('009EA0E0',119) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) elseif value3 == 45 then -- вот это условие добавлено if value4 == 45 then -- вот это условие добавлено, но правильно ли writeBytes('009EA0D8',112) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',113) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) end end end end {$ASM} [DISABLE] {$LUA} timer:setEnabled(false) Изменено 24 декабря, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 24 декабря, 2016 Поделиться Опубликовано 24 декабря, 2016 Если у тебя блоки при value1 == 72 и value1 == 8 идентичны, то лучше так Скрытый текст if value1 == 72 or value1 == 8 then if value2 == 1 then writeBytes('009EA0D8',114) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',115) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) elseif value2 == 2 then writeBytes('009EA0D8',116) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',117) writeBytes('009EA0E5',19) writeBytes('009EA0E6',1) elseif value2 == 3 then writeBytes('009EA0D8',118) writeBytes('009EA0DD',23) writeBytes('009EA0DE',1) writeBytes('009EA0E0',119) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) elseif value3 == 45 and value4 == 45 then writeBytes('009EA0D8',112) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',113) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) end end Только здесь нужно понимать приоритет выполнения кода, допустим условие elseif value3 == 45 and value4 == 45 then проверится только в том случае, если value2 не равно ни одному из выше перечисленных значений 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 24 декабря, 2016 Автор Поделиться Опубликовано 24 декабря, 2016 32 минуты назад, Dino сказал: Если у тебя блоки при value1 == 72 и value1 == 8 идентичны Да, идентичны. 33 минуты назад, Dino сказал: условие elseif value3 == 45 and value4 == 45 then проверится только в том случае, если value2 не равно ни одному из выше перечисленных значений Как раз так и надо. Спасибо. Счас проверю этот скрипт за пол часа. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 24 декабря, 2016 Автор Поделиться Опубликовано 24 декабря, 2016 (изменено) 2 часа назад, Dino сказал: if value1 == 72 or value1 == 8 then if value2 == 1 then Проверил этот скрипт. Скрипт работает замечательно. Огромное спасибо. 5-7 лет пытался это сделать. Периодично, сначала искал нужные адреса, первые два года. Вот пример рабочего скрипта если кому будет интересно: Скрытый текст [ENABLE] {$LUA} timer = createTimer(true) timer:setInterval(50) timer.OnTimer = function() value1 = readBytes('00A444E8',1) value2 = readBytes('00A443DF',1) value3 = readBytes('009B583F',1) value4 = readBytes('009B59E7',1) if value1 == 88 then writeBytes('00A444E8',72) elseif value1 == 24 then writeBytes('00A444E8',8) end if value1 == 72 or value1 == 8 then if value2 == 1 then writeBytes('009EA0D8',114) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',115) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) elseif value2 == 2 then writeBytes('009EA0D8',116) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',117) writeBytes('009EA0E5',19) writeBytes('009EA0E6',1) elseif value2 == 3 then writeBytes('009EA0D8',118) writeBytes('009EA0DD',23) writeBytes('009EA0DE',1) writeBytes('009EA0E0',119) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) elseif value3 == 45 and value4 == 45 then writeBytes('009EA0D8',112) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',113) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) end end end {$ASM} [DISABLE] {$LUA} timer:setEnabled(false) Удивило, то что в Lua так просто используются простые английские слова "or" и "and". Изменено 24 декабря, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 25 декабря, 2016 Автор Поделиться Опубликовано 25 декабря, 2016 (изменено) Решил добавить еще одно условие. если value1 = 88 то меняется на 72 -- и тогда идет запись в адрес value1 если value1 = 24 то меняется на 8 Дальше если value1 = 72 и value2 = 1 то идет запись значений №1 -- и тогда идет запись в одни блоки адресов если value1 = 72 и value2 = 2 то идет запись значений №2 и так далее по схеме дальше если value5 = 88 то меняется на 72 -- (здесь добавил) тогда идет запись в адрес value5 если value5 = 24 то меняется на 8 Дальше если value5 = 72 и value2 = 1 то идет запись значений №1 - (здесь добавил) тогда идет запись в другие блоки адресов если value5 = 72 и value2 = 2 то идет запись значений №2 и так далее по схеме дальше если value6 = 88 то меняется на 72 -- (здесь добавил) тогда идет запись в адрес value6 если value6 = 24 то меняется на 8 Дальше если value6 = 72 и value2 = 1 то идет запись значений №1 -- (здесь добавил) тогда идет запись в третьи блоки адресов если value6 = 72 и value2 = 2 то идет запись значений №2 и так далее по схеме. Если коротко описать то что изложено выше, то: если value1 равно 88 и т.д. по стандарту -- тогда идет запись в одни адреса блоков если value5 равно 88 и т.д. по стандарту -- тогда идет запись в другие адреса блоков если value6 равно 88 и т.д. по стандарту -- тогда идет запись в третьи адреса блоков Вот написал скрипт и скрипт работает. Но, хочу узнать правильно ли написан скрипт? Скрытый текст [ENABLE] {$LUA} timer = createTimer(true) timer:setInterval(50) timer.OnTimer = function() value1 = readBytes('00A444E8',1) value2 = readBytes('00A443DF',1) value3 = readBytes('009B583F',1) value4 = readBytes('009B59E7',1) value5 = readBytes('00A44418',1) value6 = readBytes('00A44480',1) if value1 == 88 then writeBytes('00A444E8',72) -- и тогда идет запись в адрес value1 elseif value1 == 24 then writeBytes('00A444E8',8) end if value1 == 72 or value1 == 8 then -- и тогда идет запись в одни блоки адресов if value2 == 1 then writeBytes('009EA0D8',114) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',115) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) elseif value2 == 2 then writeBytes('009EA0D8',116) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',117) writeBytes('009EA0E5',19) writeBytes('009EA0E6',1) elseif value2 == 3 then writeBytes('009EA0D8',118) writeBytes('009EA0DD',23) writeBytes('009EA0DE',1) writeBytes('009EA0E0',119) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) elseif value3 == 45 and value4 == 45 then writeBytes('009EA0D8',112) writeBytes('009EA0DD',19) writeBytes('009EA0DE',1) writeBytes('009EA0E0',113) writeBytes('009EA0E5',23) writeBytes('009EA0E6',1) end end if value5 == 88 then writeBytes('00A44418',72) -- и тогда идет запись в адрес value5 elseif value5 == 24 then writeBytes('00A44418',8) end if value5 == 72 or value5 == 8 then -- и тогда идет запись в другие блоки адресов if value2 == 1 then writeBytes('009E9858',114) writeBytes('009E985D',19) writeBytes('009E985E',1) writeBytes('009E9860',115) writeBytes('009E9865',23) writeBytes('009E9866',1) elseif value2 == 2 then writeBytes('009E9858',116) writeBytes('009E985D',19) writeBytes('009E985E',1) writeBytes('009E9860',117) writeBytes('009E9865',19) writeBytes('009E9866',1) elseif value2 == 3 then writeBytes('009E9858',118) writeBytes('009E985D',23) writeBytes('009E985E',1) writeBytes('009E9860',119) writeBytes('009E9865',23) writeBytes('009E9866',1) elseif value3 == 45 and value4 == 45 then writeBytes('009E9858',112) writeBytes('009E985D',19) writeBytes('009E985E',1) writeBytes('009E9860',113) writeBytes('009E9865',23) writeBytes('009E9866',1) end end if value6 == 88 then writeBytes('00A44480',72) -- и тогда идет запись в адрес value6 elseif value6 == 24 then writeBytes('00A44480',8) end if value6 == 72 or value6 == 8 then -- и тогда идет запись в третьи блоки адресов if value2 == 1 then writeBytes('009E9C98',114) writeBytes('009E9C9D',19) writeBytes('009E9C9E',1) writeBytes('009E9CA0',115) writeBytes('009E9CA5',23) writeBytes('009E9CA6',1) elseif value2 == 2 then writeBytes('009E9C98',116) writeBytes('009E9C9D',19) writeBytes('009E9C9E',1) writeBytes('009E9CA0',117) writeBytes('009E9CA5',19) writeBytes('009E9CA6',1) elseif value2 == 3 then writeBytes('009E9C98',118) writeBytes('009E9C9D',23) writeBytes('009E9C9E',1) writeBytes('009E9CA0',119) writeBytes('009E9CA5',23) writeBytes('009E9CA6',1) elseif value3 == 45 and value4 == 45 then writeBytes('009E9C98',112) writeBytes('009E9C9D',19) writeBytes('009E9C9E',1) writeBytes('009E9CA0',113) writeBytes('009E9CA5',23) writeBytes('009E9CA6',1) end end end {$ASM} [DISABLE] {$LUA} timer:setEnabled(false) Изменено 25 декабря, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 25 декабря, 2016 Автор Поделиться Опубликовано 25 декабря, 2016 (изменено) Если очень коротко, то условия и значения остаются теми же, а меняются только адреса. (Вот это условие добавил.) Изменено 25 декабря, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 25 декабря, 2016 Поделиться Опубликовано 25 декабря, 2016 Если скрипт работает, то он написан правильно, а вот правильно ли он написан с точки зрения логики - тебе виднее. Я приводил выше примеры, как составляются условия. А вообще советую синтаксис учить. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения