Garik66 Опубликовано 10 марта, 2016 Поделиться Опубликовано 10 марта, 2016 35 минуты назад, AntonVitalievich сказал: автоматически вырисовывают ноли когда цифра меньше 10 то есть в форме отображается не 1 а 01. Хороший метод - перекрытие Label -ов. Когда думал сам над реализацией, то так примерно и представлял. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 марта, 2016 Поделиться Опубликовано 10 марта, 2016 Для Razi math.floor (x) Возвращает наибольшее целое число, меньшее или равное x. (Округление «вниз») Взято отсюда: http://www.lua.ru/doc/5.6.html Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 10 марта, 2016 Автор Поделиться Опубликовано 10 марта, 2016 3 часа назад, AntonVitalievich сказал: Луа вариант У меня один вопрос, что нужно делать чтоб приклеить этот Lua скрипт к своей игре? Подставлять Аобскан инструкции на запись на адрес с секундами из моей игры? но желательно было бы описать последовательность действий. (Адрес четырехбайтный из моей игры "009E9150" который считает секунды.) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 марта, 2016 Поделиться Опубликовано 10 марта, 2016 (изменено) 1 час назад, Razi сказал: У меня один вопрос, что нужно делать чтоб приклеить этот Lua скрипт к своей игре? Тебе нужно взять форму и скрипт AntonVitalievich, но изменить {$ASM} часть уже для твоей инструкции и использовать фильтр, который мы использовали в предыдущем скрипте. Сейчас соединю скрипты. Изменено 10 марта, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 марта, 2016 Поделиться Опубликовано 10 марта, 2016 (изменено) Скрипт "TIMEscript_AntonVitalievich_for_Razi" Скрытый текст [ENABLE] {$LUA} function RecalculetionStartUp(sender) if TIME.CEButton1.Caption=="START" then TIME.CEButton1.Caption="STOP" TIME.CETimer1.Enabled=true else if TIME.CEButton1.Caption=="STOP" then TIME.CEButton1.Caption="START" TIME.CETimer1.Enabled=false end end end function DigitControl() A = readInteger("gametimeSTANDAART") if A~="??" then if (math.floor(A))-(math.floor(A/60)*60)>-1 and (math.floor(A))-(math.floor(A/60)*60)<10 then TIME.CELabel5.Caption="0" TIME.CELabel6.Left=256 TIME.CELabel6.Caption=(math.floor(A))-(math.floor(A/60)*60) else if A~="??" then TIME.CELabel5.Caption="" TIME.CELabel6.Left=TIME.CELabel5.Left+2 TIME.CELabel6.Caption=(math.floor(A))-(math.floor(A/60)*60) end end end if A~="??" then if (math.floor(A/60))-(math.floor(A/3600)*60)>-1 and (math.floor(A/60))-(math.floor(A/3600)*60)<10 then TIME.CELabel3.Caption="0" TIME.CELabel7.Left=184 TIME.CELabel7.Caption=(math.floor(A/60))-(math.floor(A/3600)*60) else if A~="??" then TIME.CELabel3.Caption="" TIME.CELabel7.Left=TIME.CELabel3.Left+2 TIME.CELabel7.Caption=(math.floor(A/60))-(math.floor(A/3600)*60) end end end if A~="??" then if (math.floor(A/3600))-(math.floor(A/1440/60))*24>-1 and (math.floor(A/3600))-(math.floor(A/1440/60))*24<10 then TIME.CELabel1.Caption="0" TIME.CELabel8.Left=112 TIME.CELabel8.Caption=(math.floor(A/3600))-(math.floor(A/1440/60))*24 else if A~="??" then TIME.CELabel1.Caption="" TIME.CELabel8.Left=TIME.CELabel1.Left+2 TIME.CELabel8.Caption=(math.floor(A/3600))-(math.floor(A/1440/60))*24 end end end end {$ASM} aobscan(gameclock,89 1C 08 81 E2 FC FF 1F 00) alloc(newmem,$2048) registersymbol(gameclock) globalalloc(gametimeSTANDAART, 4) label(return) newmem: push edx lea edx,[eax+ecx] cmp edx,009E9150 // Проверяем с таймером ли работает инструкция при текущем срабатывании. pop edx jne code mov [gametimeSTANDAART],ebx code: mov [eax+ecx],ebx and edx,001FFFFC jmp return gameclock: jmp newmem db 90 90 90 90 return: [DISABLE] gameclock: db 89 1C 08 81 E2 FC FF 1F 00 unregistersymbol(gameclock) dealloc(gametimeSTANDAART) dealloc(newmem) И сразу с табличкой (в табличке проект AntonVitalievich ) и новый скрипт. Проверяй. Эту табличку удалил (дальше выложил новую). Изменено 11 марта, 2016 пользователем Garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 10 марта, 2016 Автор Поделиться Опубликовано 10 марта, 2016 (изменено) Проверил работает. Но каждые 24 часа начинает считать с 00 часов. Например 25 часов будет отображаться как 01:00:00, а мне нужно например чтоб если в адресе с секундами 36,000,000, то отображалось бы 10000:00:00 то есть 10000 часов 00 минут 00 секунд. А для этого я так понимаю нужно удалить какую-то строку, что обнуляет количество часов в скрипте. То есть, ограничения в показателе количества часов мне не нужны. Нужно например, чтоб количество часов отображалось от 00 до 596,523 часов = ~68 лет ( или аж до 1,193,046 часов = ~136 лет). Потому что, четырехбайтный адрес может идти аж до 4294967295 секунд (а в Hex FF FF FF FF) что приблизительно = 136 лет с копейками и после этого игровой таймер обнуляется и идет сначала, то есть таймер идет бесконечно. Garik66, как ты выбираешь имя пользователя, чтоб оно было как ссылка? На старом движке это делалось легко, а счас незнаю как. Так понимаю, что ограничение на число в секундах в Hex 7F FF FF FF или 2147483647 в Dec, ограничивается либо из-за формы, потому что туда нельзя вставить число выше этого или из-за регистров, потому что в регистры нельзя вставить число выше в Hex 7F FF FF FF или 2147483647 в Dec ? Изменено 10 марта, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 марта, 2016 Поделиться Опубликовано 10 марта, 2016 По LUA части скрипта, подожди когда AntonVitalievich ответит. 42 минуты назад, Razi сказал: Garik66, как ты выбираешь имя пользователя, чтоб оно было как ссылка? Просто копирую ник пользователя (слева от сообщения) и вставляю его в текст. 45 минуты назад, Razi сказал: Так понимаю, что ограничение на число в секундах в Hex 7F FF FF FF или 2147483647 в Dec, ограничивается либо из-за формы, потому что туда нельзя вставить число выше этого или из-за регистров, потому что в регистры нельзя вставить число выше в Hex 7F FF FF FF или 2147483647 в Dec ? Если ты спрашиваешь про это моё сообщение то это ограничение стоит непосредственно в игре Assassin’s Creed Chronicles: India, т.е. это строчка из кода самой игры. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 10 марта, 2016 Автор Поделиться Опубликовано 10 марта, 2016 (изменено) 1 час назад, Garik66 сказал: ограничение стоит непосредственно в игре Просто дело в том, что в твоем АА скрипте, когда вставлял число больше чем 7F FF FF FF в 4-х байтный адрес с секундами в игре, то число отображалось в форме, при пересчете неверно. Из чего я сделал вывод, что либо в форму нельзя вставить число, либо в регистры нельзя вставить число больше чем 7F FF FF FF (вставить, можно, но оно отображается неверно) Ага, у меня расширения в браузере не позволяют так скопировать ник пользователя. Изменено 10 марта, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 марта, 2016 Поделиться Опубликовано 10 марта, 2016 Это ограничение 4 байта, если значение знаковое. Вот по ограничениям посмотри NullAlex выложил табличку диапазонов для различны типов данных: Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 10 марта, 2016 Автор Поделиться Опубликовано 10 марта, 2016 (изменено) 9 минут назад, Garik66 сказал: ограничение 4 байта, если значение знаковое Вот в том то и интерес, что в адрес с секундами в игре, то могу вставить число аж 4,294,967,295. Значит число по идеи 4 байта (беззнаковое). Изменено 10 марта, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2016 Поделиться Опубликовано 11 марта, 2016 (изменено) 11 час назад, Razi сказал: Вот в том то и интерес, что в адрес с секундами в игре, то могу вставить число аж 4,294,967,295. Значит число по идеи 4 байта (беззнаковое). Значит у тебя в игре число 4 байта (беззнаковое), но при использовании math.floor в LUA-части скрипта становится знаковым. 14 часа назад, Razi сказал: Проверил работает. Но каждые 24 часа начинает считать с 00 часов. Например 25 часов будет отображаться как 01:00:00, а мне нужно например чтоб если в адресе с секундами 36,000,000, то отображалось бы 10000:00:00 то есть 10000 часов 00 минут 00 секунд. А для этого я так понимаю нужно удалить какую-то строку, что обнуляет количество часов в скрипте. Чтобы сделать, как ты хочешь: 1. Есть сложный путь: с добавлением кучи лейблов с записью "0", выравниванием лейблов на форме и нужно дописать ещё много кода в LUA. Но, мне кажется запись типа 0000001:00:00 не красиво выглядит. 2. Поэтому вариант более простой: удалить один лейбл, у одного лейбла изменить размер и немного исправить код на LUA. Если выбираешь вариант 2, то: 2.1. Удали с формы CELabel1. 2.2. Увеличь размер CELabel8, чтобы в него влазили все цифры часов (сколько ты их хочешь). 2.3. Выровняй лейблы на форме (чтобы было красиво). Увеличь ширину самой формы, если понадобится. Так как при выравнивании лейблов на форме затронутся и другие лейблы, то нужно изменить их позиции в LUA: Скрытый текст TIME.CELabel6.Left=256 -- измени цифры на новые TIME.CELabel7.Left=184 -- измени цифры на новые 2.4. Измени код LUA: Скрытый текст if A~="??" then if (math.floor(A/3600))-(math.floor(A/1440/60))*24>-1 and (math.floor(A/3600))-(math.floor(A/1440/60))*24<10 then TIME.CELabel1.Caption="0" TIME.CELabel8.Left=112 TIME.CELabel8.Caption=(math.floor(A/3600))-(math.floor(A/1440/60))*24 else if A~="??" then TIME.CELabel1.Caption="" TIME.CELabel8.Left=TIME.CELabel1.Left+2 TIME.CELabel8.Caption=(math.floor(A/3600))-(math.floor(A/1440/60))*24 end end end end на этот: Скрытый текст if A~="??" then TIME.CELabel8.Caption=(math.floor(A/3600) end end Изменено 11 марта, 2016 пользователем Garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 11 марта, 2016 Поделиться Опубликовано 11 марта, 2016 Луа версия часов с днями и другими единицами измерения. Немного изменены способы вычислений. В остальном все также. Максимальное расчетное время чуть более 1 века и 30 лет (Более 4-х байтник не вмешает, похоже) Часы можно перемещать по форме за зеленый лейбл с надписями единиц измерения. Нижние цифры имеют привязку и никуда не денутся Скрипт луа: Скрытый текст function RecalculetionStartUp(sender) if TIME.START_BUTTON.Caption=="START" then TIME.START_BUTTON.Caption="STOP" TIME.CETimer1.Enabled=true else if TIME.START_BUTTON.Caption=="STOP" then TIME.START_BUTTON.Caption="START" TIME.CETimer1.Enabled=false end end end function DigitControl() A = readInteger("gametimeSTANDAART") if A~="??" then if (math.floor(A))-(math.floor(A/60)*60)>-1 and (math.floor(A))-(math.floor(A/60)*60)<10 then TIME.FAKE_1.Caption="0" TIME.F_SECONDS.BorderSpacing.Left=422 TIME.F_SECONDS.Caption=(math.floor(A))-(math.floor(A/60)*60) else if A~="??" then TIME.FAKE_1.Caption="" TIME.F_SECONDS.BorderSpacing.Left=397 TIME.F_SECONDS.Caption=(math.floor(A))-(math.floor(A/60)*60) end end end if A~="??" then if (math.floor(A/60))-(math.floor(A/60/60)*60)>-1 and (math.floor(A/60))-(math.floor(A/60/60)*60)<10 then TIME.FAKE_2.Caption="0" TIME.F_MINUTES.BorderSpacing.Left=351 TIME.F_MINUTES.Caption=(math.floor(A/60))-(math.floor(A/60/60)*60) else if A~="??" then TIME.FAKE_2.Caption="" TIME.F_MINUTES.BorderSpacing.Left=326 TIME.F_MINUTES.Caption=(math.floor(A/60))-(math.floor(A/60/60)*60) end end end if A~="??" then if (math.floor(A/3600))-(math.floor(A/3600/24))*24>-1 and (math.floor(A/3600))-(math.floor(A/3600/24))*24<10 then TIME.FAKE_3.Caption="0" TIME.F_HOURS.BorderSpacing.Left=280 TIME.F_HOURS.Caption=(math.floor(A/3600))-(math.floor(A/3600/24))*24 else if A~="??" then TIME.FAKE_3.Caption="" TIME.F_HOURS.BorderSpacing.Left=255 TIME.F_HOURS.Caption=(math.floor(A/3600))-(math.floor(A/3600/24))*24 end end end if A~="??" then if math.floor(A/86400)-(math.floor(A/86400/31))*31>-1 and math.floor(A/86400)-(math.floor(A/86400/31))*31<10 then TIME.FAKE_4.Caption="0" TIME.DAYS.BorderSpacing.Left=210 TIME.DAYS.Caption=math.floor(A/86400)-(math.floor(A/86400/31))*31 else if A~="??" then TIME.FAKE_4.Caption="" TIME.DAYS.BorderSpacing.Left=185 TIME.DAYS.Caption=math.floor(A/86400)-(math.floor(A/86400/31))*31 end end end if A~="??" then if math.floor(A/2678400)-(math.floor(A/2678400/12))*12>-1 and math.floor(A/2678400)-(math.floor(A/2678400/12))*12<10 then TIME.FAKE_5.Caption="0" TIME.MONTHS.BorderSpacing.Left=140 TIME.MONTHS.Caption=math.floor(A/2678400)-(math.floor(A/2678400/12))*12 else if A~="??" then TIME.FAKE_5.Caption="" TIME.MONTHS.BorderSpacing.Left=116 TIME.MONTHS.Caption=math.floor(A/2678400)-(math.floor(A/2678400/12))*12 end end end if A~="??" then if math.floor(A/32140800)-(math.floor(A/32140800/100))*100>-1 and math.floor(A/32140800)-(math.floor(A/32140800/100))*100<10 then TIME.FAKE_6.Caption="0" TIME.YEARS.BorderSpacing.Left=70 TIME.YEARS.Caption=math.floor(A/32140800)-(math.floor(A/32140800/100))*100 else if A~="??" then TIME.FAKE_6.Caption="" TIME.YEARS.BorderSpacing.Left=45 TIME.YEARS.Caption=math.floor(A/32140800)-(math.floor(A/32140800/100))*100 end end end if A~="??" then TIME.CENTURE.Caption=math.floor(A/3214080000) end end Таблица СЕ: Пароль на скачавание - luatimev2 http://rghost.ru/8YXcLT5Pr Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2016 Поделиться Опубликовано 11 марта, 2016 8 минут назад, AntonVitalievich сказал: Луа версия часов с днями и другими единицами измерения. Круто - как всегда. Но месяца - бывают 28, 29, 30 и 31 день. И год бывает високосный. Т.е. если уже писать такие часы, то это тоже нужно будет учитывать, а так очень круто!!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 11 марта, 2016 Автор Поделиться Опубликовано 11 марта, 2016 Нужно чтоб если в адресе с секундами 36,000,000, то отображалось бы 10000:00:00, то есть 10000 часов 00 минут 00 секунд. Дни и месяцы не нужны. Хотя калькулятор классный. При этом не обязательно, чтоб там где показывает количество часов было,например, когда на таймере всего 52 секунд то показывало бы например: 000000:00:52 это будет выглядеть не очень красиво, как и сказал Garik66. А вот если будет показывать 00:00:52 или 0:00:52 то это как раз так как нужно. Но самое главное чтоб в количество отображаемых часов могло влезть и число 1,000,000 часов. Нужно было, чтоб только минуты и секунды отображались как в часах начиная с "00" дальше "01" и т.д. А количество часов могут начинаться или просто с "0" или с "00". Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2016 Поделиться Опубликовано 11 марта, 2016 6 минут назад, Razi сказал: Но самое главное чтоб в количество отображаемых часов могло влезть и число 1,000,000 часов. Сделай сам себе. План - как это сделать, я тебе уже написал здесь: Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2016 Поделиться Опубликовано 11 марта, 2016 (изменено) Вот попробуй: Выложил табличку ниже (эту удалил) Изменено 11 марта, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 11 марта, 2016 Автор Поделиться Опубликовано 11 марта, 2016 (изменено) Попробовал и по твоему плану немного, и в скрипте который только что выложил. Когда количество часов состоит из двух цифр, то они залазят на минуты. Но, еще не все сделал, так что посмотрю что еще можно доделать. Изменено 11 марта, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2016 Поделиться Опубликовано 11 марта, 2016 (изменено) 20 минуты назад, Razi сказал: Когда количество часов состоит из двух цифр Значит лейбл CELabel8 расширяется вправо, нужно уточнить у AntonVitalievich как и где изменить параметры лейбла, чтобы он расширялся влево, либо сразу имел конечный размер, но первый 0, чтобы находился с правой стороны лейбла (я в этом совсем не разбираюсь, так как не писал трейнеры и с формами практически совсем не работал) И сейчас мне не на чем потетстить скрипт, у меня игра переустановлена. Либо ещё один вариант, но придётся тогда дописать LUA код, для изменения левой позиции CELabel8. А для этого проще наверное скачать вторую версию проекта AntonVitalievic и работать уже с нею, так там позиции уже просчитаны практически. Изменено 11 марта, 2016 пользователем Garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2016 Поделиться Опубликовано 11 марта, 2016 Сделал тебе до 5 цифр в часах ,т,е 99999 : 59 : 59. Дальше сделай сам: Lua version time.CT 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 11 марта, 2016 Поделиться Опубликовано 11 марта, 2016 5 часов назад, Garik66 сказал: Т.е. если уже писать такие часы, то это тоже нужно будет учитывать Да, верно. Я этого не взял во внимание. Но я даже не представляю как это сделать. *Интересно, если изменить длину одной секунды, и подстроить её под частоту вращения земли вокруг солнца, то получится ли избавится от необходимости такого явления как високосный год....Не совсем до конца понимаю как происходят все измерения связанные со временем, и что от чего зависит.... Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 11 марта, 2016 Автор Поделиться Опубликовано 11 марта, 2016 (изменено) 4 часа назад, Garik66 сказал: Сделал тебе до 5 цифр в часах ,т,е 99999 : 59 : 59. Дальше сделай сам Сделал. Теперь когда вставляю число 4,294,967,295 в адрес секундами, то отображается все правильно, то есть показывает 1,193,046 часов и т.д. То есть сейчас значения в форме отображают максимально возможное для адреса в 4 байта (беззнакового). Думал, что количество часов в форме само будет двигаться влево. 50 минут назад, AntonVitalievich сказал: подстроить её под частоту вращения земли вокруг солнца, то получится ли избавится от необходимости такого явления Скорее всего по идее, все равно будет нужна поправка по времени, например раз в 10 или раз в 20 лет, нужно будет делать в каком-то году на один день больше или меньше. Изменено 11 марта, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2016 Поделиться Опубликовано 11 марта, 2016 30 минуты назад, Razi сказал: Сделал. Молодец! Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 11 марта, 2016 Автор Поделиться Опубликовано 11 марта, 2016 Garik66, еще вчера хотел написать. Здаравенное спасибо за помощь. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2016 Поделиться Опубликовано 11 марта, 2016 Не за что. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 12 марта, 2016 Автор Поделиться Опубликовано 12 марта, 2016 (изменено) 8 часов назад, AntonVitalievich сказал: Да, верно. Я этого не взял во внимание. Я могу лишь предложить вот такой вариант. (Именно в таком калькуляторе, не очень заинтересован, но ради любопытства, вот вариант) В году 365 дней. Чтоб учитывать что раз в 4 года на один день больше, нужно всего лишь сделать следующее. За год считать 365,25 т.е. 365 дней с четвертью разделить на 12 месяцев: 365,25 / 12 = 30,4375. (Это число учитывает даже то, что раз в 4 года на день больше в году) И вот это число 30,4375 учитывать в расчете месяцев, если в Lua можно записывать не целые числа конечно. Потому что, если будем учитывать что в месяце 30 дней, то в году будет 360 дней, а если 31 день то в году будет 372 дня, а в году на самом деле 365 дней и 6 часов (365,25 в днях). Конечно такой метод не даст астрономической точности, например расчет времени через 2 года, но по большим расчетам это будет более точно. А за месяц считать 30,4375 дней, что в секундах будет = 2,629,800 секунд. А за год считать 365,25 дней, что в секундах = 31,557,600. Изменено 12 марта, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения