Razi

Нужна помощь в дописании скрипта на языке Lua.

10 сообщений в этой теме

Помогите дописать скрипт на языке 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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Скрытый текст

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
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Проверил скрипт работает. Вот пример рабочего скрипта:

Скрытый текст

[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)

 

 

Изменено пользователем Razi
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если у тебя блоки при 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
32 минуты назад, Dino сказал:

Если у тебя блоки при value1 == 72 и value1 ==  8 идентичны

Да, идентичны.

 

33 минуты назад, Dino сказал:

условие elseif value3 == 45 and value4 == 45 then проверится только в том случае, если value2 не равно ни одному из выше перечисленных значений

Как раз так и надо. Спасибо.

Счас проверю этот скрипт за пол часа.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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".

Изменено пользователем Razi
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Решил добавить еще одно условие.

если 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)

 

 

Изменено пользователем Razi
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если очень коротко, то условия и значения остаются теми же, а меняются только адреса.  (Вот это условие добавил.)

Изменено пользователем Razi
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если скрипт работает, то он написан правильно, а вот правильно ли он написан с точки зрения логики - тебе виднее. Я приводил выше примеры, как составляются условия. А вообще советую синтаксис учить.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас