Перейти к содержанию

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


Рекомендуемые сообщения

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

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

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

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

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

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

[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
Ссылка на комментарий
Поделиться на другие сайты

Если у тебя блоки при 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 не равно ни одному из выше перечисленных значений

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

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

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

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

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

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

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

Изменено пользователем Razi
Ссылка на комментарий
Поделиться на другие сайты

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

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

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.