Razi Опубликовано 14 февраля, 2016 Поделиться Опубликовано 14 февраля, 2016 1) Как в нижеприведенный скрипт добавить условие что если адрес 00A3F3E5 равен 2, то делать заморозку адреса по названию? (адреса по 1 байту) Lua скрипт по заморозке по названию: Скрытый текст [ENABLE] {$LUA} addresslist = getAddressList() description1= [[control]] memoryrec1 = addresslist_getMemoryRecordByDescription(addresslist, description1) memoryrecord_freeze(memoryrec1) [DISABLE] {$LUA} memoryrecord_unfreeze(memoryrec1) 2) Как сделать чтобы нижеприведенный скрипт работал при условии, что когда адрес 00A3F3E5 равен 2 происходит заморозка адреса 00A444E8 ? (адреса по 1 байту) Lua скрипт по заморозке, но скрипт не работает почему-то: Скрытый текст [ENABLE] {$LUA} FreezingConditions = readInteger('00A3F3E5') if (FreezingConditions == 2) then memoryrecord_freeze('00A444E8') end [DISABLE] {$LUA} 3) Как в нижеприведенный скрипт еще добавить , что если другой адрес 00A444E8 равен значению 88, то изменять значение в этом адресе на 72. И если этот же адрес 00A444E8 равен значению 24, то изменять значение в этом адресе на 8 ? (адреса по 1 байту, кроме 00A9D874 - 4 байта) Скрытый текст [ENABLE] {$LUA} PlaySound(findTableFile([[Activate]])) timer = createTimer(true) timer:setInterval(100) timer.OnTimer = function() value = readInteger('00A9D874') if (value == 600000) then writeInteger('00A9D874',10000) end end [DISABLE] {$LUA} PlaySound(findTableFile([[Deactivate]])) timer:setEnabled(false) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 14 февраля, 2016 Поделиться Опубликовано 14 февраля, 2016 (изменено) 1. Как я понял control - это название адреса, который нужно заморозить. Тогда нужно добавить таймер (из 3 скрипта) для проверки условия (условие правильно написано во 2 скрипте), т.е. так: Скрытый текст [ENABLE] {$LUA} addresslist = getAddressList() description1= [[control]] memoryrec1 = addresslist_getMemoryRecordByDescription(addresslist, description1) timer = createTimer(true) timer:setInterval(100) timer.OnTimer = function() FreezingConditions = readInteger('00A3F3E5') if (FreezingConditions == 2) then memoryrecord_freeze(memoryrec1) else if (FreezingConditions ~= 2) then memoryrecord_unfreeze(memoryrec1) end end end {$ASM} [DISABLE] {$LUA} memoryrecord_unfreeze(memoryrec1) timer:setEnabled(false) Проверь скрипт. (Возможно, что нужно будет добавить ещё один end. Мне к сожалению скрипт проверить не на чем.) PS: Ниже в видео проверил работу скрипта - скрипт работает. Действительно нужно было добавить один end. (Скрипт поправил здесь же.) 2. Почему скрипт не работает - потому что нужно подключить таймер, чтобы была постоянная проверка условия и его выполнения при активации скрипта. И как оказалось при проверке memoryrecord_freeze работает только с записью в таблице (а не с конкретным статичным или с указателями адресом), т.е. может заморозить адрес (или скрипт) по названию, ID или Index записи. На 3. вопрос пусть ещё кто-нибудь ответит. Изменено 15 февраля, 2016 пользователем Garik66 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 15 февраля, 2016 Автор Поделиться Опубликовано 15 февраля, 2016 Ты увидел то, чего не было. Подкалывать человека который помогает, не в моем стиле и это не логично с моей стороны, было бы. По скриптам, к сожалению не работают предложенные варианты. Возможно дело в том, что адреса по одному байту, а команды в скрипте действуют как на 4-байтные адреса. И в 4-байтном адресе то, будет совсем другое число, а не 2 например, как в адресе 00A3F3E5. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 февраля, 2016 Поделиться Опубликовано 15 февраля, 2016 47 минуты назад, Razi сказал: По скриптам, к сожалению не работают предложенные варианты. Скрипт рабочий. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 февраля, 2016 Поделиться Опубликовано 15 февраля, 2016 1 час назад, Razi сказал: Возможно дело в том, что адреса по одному байту Когда смотрел твои скрипты, мне показалось, что под все адреса отводятся 4 байта. Но на всякий случай тот же скрипт под одно-байтовый адрес. Скрытый текст [ENABLE] {$LUA} addresslist = getAddressList() description1= [[control]] memoryrec1 = addresslist_getMemoryRecordByDescription(addresslist, description1) timer = createTimer(true) timer:setInterval(100) timer.OnTimer = function() FreezingConditions = readBytes('00A3F3E5',1) if (FreezingConditions == 2) then memoryrecord_freeze(memoryrec1) else if (FreezingConditions ~= 2) then memoryrecord_unfreeze(memoryrec1) end end end {$ASM} [DISABLE] {$LUA} memoryrecord_unfreeze(memoryrec1) timer:setEnabled(false) где readBytes('00A3F3E5',1) - readBytes - читать по адресу '00A3F3E5', а 1 -количество байт. Отрывок из файла main.LUA Скрытый текст readBytes(address,bytecount, ReturnAsTable ) : returns the bytes at the given address. If ReturnAsTable is true it will return a table instead of multiple bytes Reads the bytes at the given address and returns a table containing the read out bytes 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 15 февраля, 2016 Автор Поделиться Опубликовано 15 февраля, 2016 Работает предыдущий скрипт, с командой readInteger('00A3F3E5'), просто эта команда считывает 4-байтные значения в адресе. Поменял условие в скрипте замораживать, не когда значение в адресе = 2, а на 4-байтное значение в адресе (00A3F3E5) в этом случае будет = 33686018. И после этого скрипт стал замораживать, так как надо. Подкорректировал под игру интервал обращений в скрипте до 500 (timer:setInterval(500)), а то слишком быстро замораживало. Скрипт с командой readBytes('00A3F3E5',1) замораживает как раз так, как надо. То есть когда в адресе 00A3F3E5 значение становится = 2, происходит заморозка. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 15 февраля, 2016 Автор Поделиться Опубликовано 15 февраля, 2016 (изменено) Получается второй скрипт в заголовке темы, почти идентичен первому скрипту в заголовке темы. Но второй скрипт так и несмог сделать, чтоб он заработал. Скрытый текст [ENABLE] {$LUA} timer = createTimer(true) timer:setInterval(500) FreezingConditions = readInteger('00A3F3E5') if (FreezingConditions == 33686018) then memoryrecord_freeze('[[control]]') end timer:setEnabled(false) [DISABLE] {$LUA} Изменено 15 февраля, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 февраля, 2016 Поделиться Опубликовано 15 февраля, 2016 18 минуту назад, Razi сказал: Получается второй скрипт в заголовке темы, почти идентичен первому скрипту в заголовке темы. нет 1. скрипт морозит запись в таблице, 2. должен морозить конкретный адрес не зависимо находится он в таблице или нет. В 14.02.2016в10:32, Garik66 сказал: И как оказалось при проверке memoryrecord_freeze работает только с записью в таблице (а не с конкретным статичным или с указателями адресом), т.е. может заморозить адрес (или скрипт) по названию, ID или Index записи. Можно написать скрипт для конкретных (статичных) адресов игры. Но в этом случае вместо memoryrecord_freeze нужно будет использовать writeBytes и чуть-чуть изменить скрипт, плюс не будет крестика перед адресом, если он находится в таблице, но в игре адрес заморозится, так как write на LUA это тоже самое, что и mov на ассемблер. А про скрипт на ассемблер я уже тебе писал раньше в другой теме. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 февраля, 2016 Поделиться Опубликовано 15 февраля, 2016 Вот проверь, писал в блокноте, не проверял: Скрытый текст [ENABLE] {$LUA} timer = createTimer(true) timer:setInterval(100) timer.OnTimer = function() FreezingConditions = readBytes('00A3F3E5',1) value = readBytes('00A444E8',1) if (FreezingConditions == 2) then writeBytes('00A444E8',value) end end {$ASM} [DISABLE] {$LUA} timer:setEnabled(false) 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 февраля, 2016 Поделиться Опубликовано 15 февраля, 2016 (изменено) Хотя может не сработать, просто в файле main.LUA, для твоего случая, описания writeBytes нет. Поэтому лучше сделать так: Скрытый текст [ENABLE] {$LUA} timer = createTimer(true) timer:setInterval(100) timer.OnTimer = function() FreezingConditions = readBytes('00A3F3E5',1) value = readInteger('00A444E8') -- читать по 4 байта if (FreezingConditions == 2) then writeInteger('00A444E8',value) -- и записывать 4 байта end end {$ASM} [DISABLE] {$LUA} timer:setEnabled(false) Изменено 15 февраля, 2016 пользователем Garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 15 февраля, 2016 Автор Поделиться Опубликовано 15 февраля, 2016 (изменено) Проверил, предыдущий скрипт вставляется в таблицу, но не замораживает. А последний скрипт не вставляется в таблицу, пишет что ошибка в линии 2 и может быть в 6 линии, так как пишет неожиданный символ возле и т.д. Изменено 15 февраля, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 февраля, 2016 Поделиться Опубликовано 15 февраля, 2016 40 минуты назад, Razi сказал: А последний скрипт не вставляется в таблицу Просто на LUA я обычно не пишу. Забыл, что комментарии в скрипте на LUA пишутся после -- а не // как на ассемблер. Исправил второй скрипт. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 15 февраля, 2016 Автор Поделиться Опубликовано 15 февраля, 2016 Я видимо тоже подумал что коментарии такими и должны быть. Последний скрипт, не замораживает всеравно. В общем поэксперементировал со скриптами. И в итоге оба скрипта предыдущий и последний замораживают, но замораживает, только если изменить слово "value" в обоих скриптах на цифру 72 и тогда адрес замораживается на значении 72 и остается таким без изменений, пока в адресе 00A3F3E5 значение = 2. Заработали именно оба скрипта, потому что, когда в адресе 00A3F3E5 значение = 2, то в адресе 00A444E8 в это время значение всегда однобайтное, независимо от того однобайтный этот адрес или четырехбайтный (но чаще всего значение = 72). А вот когда в адресе 00A3F3E5 значение не равно 2, то в адресе 00A444E8 уже будет разное значение в зависимости от того какой это адрес однобайтный или четырехбайтный. Это процедуру не очень легко обьяснить. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 февраля, 2016 Поделиться Опубликовано 15 февраля, 2016 (изменено) 34 минуты назад, Razi сказал: В общем поэксперементировал со скриптами. Я специально сделал ошибку в скрипте - хотел посмотреть, научился ли ты читать скрипт, что он делает. Помню, что у тебя, когда в адресе 00A3F3E5 значение = 2, то в адресе 00A444E8 может быть 4 значения, поэтому ввёл переменную value и думал, что ты уже сможешь поправить скрипт, чтобы заработала заморозка на всех 4 значениях. Ладно не буду томить, Нужно эту строчку value = readInteger('00A444E8') Опустить ниже этой строчки if (FreezingConditions == 2) then и тогда всё заработает. А почему, сам закомментируй скрипт и поймёшь. Короче скрипт, но я его не проверял мне не на чем: Скрытый текст [ENABLE] {$LUA} timer = createTimer(true) timer:setInterval(100) timer.OnTimer = function() FreezingConditions = readBytes('00A3F3E5',1) if (FreezingConditions == 2) then value = readInteger('00A444E8') writeInteger('00A444E8',value) end end {$ASM} [DISABLE] {$LUA} timer:setEnabled(false) И ещё кое-чего не хватает в скрипте. Нужно дать понять компьютеру, что при [00A3F3E5] = 2, значение value больше не нужно читать, а только записывать. Если сам не разберёшься как это сделать, завтра сделаю. Изменено 15 февраля, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 16 февраля, 2016 Автор Поделиться Опубликовано 16 февраля, 2016 Та я считал что поскольку я новичек, то мне не нужно лезть в Lua скрипты. Считал что нужно сначала хоть немного разбираться в АА скриптах, а тогда изучать понемногу Lua скрипты. Читал только туториалы и курсы для новичков по АА скриптам. Но, поскольку мое любопытство приводит меня часто и к Lua, то мне еще нужно прочитать хотя бы туториалы по Lua скриптам. Скрипт еще не проверял и не смотрел, может успею до обеда посмотреть. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 16 февраля, 2016 Поделиться Опубликовано 16 февраля, 2016 (изменено) 5 часов назад, Razi сказал: Та я считал что поскольку я новичек, то мне не нужно лезть в Lua скрипты. Я тоже так считаю и говорил тебе уже об этом. Тогда зачем тебе скрипт на LUA, если я тебе его уже написал на СЕ ассемблер? Тебе даже AntonVitalievich (а он хорошо разбирается в LUA) написал по этому скрипту: В 06.02.2016в18:59, AntonVitalievich сказал: Razi Я не знаю к сожалению как сделать на Lua. Изменено 16 февраля, 2016 пользователем Garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 16 февраля, 2016 Автор Поделиться Опубликовано 16 февраля, 2016 6 часов назад, Garik66 сказал: Тогда зачем тебе скрипт на LUA, если я тебе его уже написал на СЕ ассемблер? Тебе даже AntonVitalievich (а он хорошо разбирается в LUA) написал по этому скрипту Именно скрипт с четырьмя значениями, мне уже не нужен потому что вы мне написали и на АА и впоследствии AntonVitalievich всетаки написал такой скрипт на Lua. Взял эти адреса в качестве примера, чтоб обучиться самому простому в Lua, такому как просто заморозка адреса. И если мне нужно будет заморозить другой адрес на Lua, то мне будет достаточно всего лишь изменить адрес в скрипте, на другой (получается скрипт будет, как шаблон). Сделал эту тему чтоб она была как азы по Lua скриптам. То есть обучение самому простому, но это оказывается не так-то просто на Lua. 15 час назад, Garik66 сказал: поэтому ввёл переменную value Но интересно, что говоришь что ввел value для того, чтобы заработала заморозка на всех 4 значениях. У AntonVitalievich там такой скрипт совсем другой, чуть ли не на две страницы. Сейчас только буду смотреть последний написанный скрипт. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 16 февраля, 2016 Поделиться Опубликовано 16 февраля, 2016 (изменено) Где AntonVitalievich дал тебе скрипт на LUA для заморозки всех 4 значений, что-то я не увидел этого, может что пропустил? Если есть такой скрипт, дай ссылку, хочу посмотреть. Изменено 16 февраля, 2016 пользователем Garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 16 февраля, 2016 Поделиться Опубликовано 16 февраля, 2016 6 минут назад, Razi сказал: чтоб обучиться самому простому в Lua, такому как просто заморозка адреса. Так наверху кучу же уже примеров дал и для однобайтного адреса и для четырёхбайтного. 7 минут назад, Razi сказал: но это оказывается не так-то просто на Lua. Что это? Ты свои условия почитай для этого скрипта в предыдущей теме. У тебя условия: при значении в [адресе1] = 2. нужно заморозить значение в [адресе2], при этом в адресе2 могут проскакивать 4 значения. При таких условиях сложнее написать скрипт на LUA, гораздо проще его было написать на ассемблер, что я и сделал давно. 15 минуту назад, Razi сказал: Сделал эту тему чтоб она была как азы по Lua скриптам. Это уже не азы. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 16 февраля, 2016 Автор Поделиться Опубликовано 16 февраля, 2016 15 минуту назад, Garik66 сказал: Если есть такой скрипт, дай ссылку, хочу посмотреть. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 16 февраля, 2016 Поделиться Опубликовано 16 февраля, 2016 (изменено) Так там конкретно проставленны 4 значения 72, 104, 8 и 40. Т.е. скрипт не универсальный. Пользователю нужно будет, чтобы применить его для себя заходить и менять эти значения в скрипте вручную. А я хотел написать именно универсальный скрипт, чтобы морозил значения любое по второму адресу. А это проще сделать с введением в скрипт переменной и флага (про флаг для этого скрипта я тебе ещё не писал). И скрипт будет короче. Ну ладно я его писать не буду. Так как для его проверки мне вначале нужно написать скрипт для эмуляции этих условий, а это ни кому не нужно ни тебе, ни мне тем более. Изменено 16 февраля, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 16 февраля, 2016 Поделиться Опубликовано 16 февраля, 2016 Кстати скрипт AntonVitalievich написал классно!!! Плюсанул его труд. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 16 февраля, 2016 Автор Поделиться Опубликовано 16 февраля, 2016 (изменено) Цитата А я хотел написать именно универсальный скрипт, чтобы морозил значения любое по второму адресу. Тогда твое решение не менее интересно. Но я так понимаю написание такого скрипта(написать именно универсальный скрипт) займет немало времени? Незнаю стоит ли тратить, столько времени на написание такого скрипта. Кстати в том скрипте с четырьмя значениями AntonVitalievich поставил заморозку на 1 милисекунду, я изменял эту заморозку на 100 милисекунд. Изменено 16 февраля, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 16 февраля, 2016 Поделиться Опубликовано 16 февраля, 2016 9 минут назад, Razi сказал: Незнаю стоит ли тратить Думаю не стоит. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 16 февраля, 2016 Автор Поделиться Опубликовано 16 февраля, 2016 Буду пробовать пока твой последний написанный скрипт. Скажу позже как работает. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения