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

Лидеры

  1. Garik66

    Garik66

    Помогаторы


    • Баллы

      13

    • Постов

      5 750


  2. Submarina

    Submarina

    Мошенники


    • Баллы

      1

    • Постов

      822


  3. Laziz

    Laziz

    Пользователи+


    • Баллы

      1

    • Постов

      207


  4. MasterGH

    MasterGH

    Ветераны


    • Баллы

      1

    • Постов

      2 999


Популярный контент

Показан контент с высокой репутацией 10.02.2016 во всех областях

  1. Отлично!!! Видишь можно писать на LUA не зная его.
    2 балла
  2. Вот разделённый по строчкам скрипт: И видео:
    2 балла
  3. Продолжим. Скрипт 3.1. имеет ограничение - мы можем замедлить таймер только в 2 раза, в 3, в 4 и т.д. Т.е. можем использовать только целые (Integer) числа. А что, если пользователю нужно замедлить таймер в полтора раза, в 2.5, в 8,5 и т.д. В этом случае скрипт 3.1. нам не поможет, придётся переписать его. В работе с нецелыми числами (дробными, вещественными, числами с плавающей точкой - короче FLOAT) нам поможет математический сопроцессор, т.е. FPU. Для изучения вопроса наберите например работа с вещественными числами в поисковике. Лично мне понравилась вот эта статья часто к ней обращаюсь, если пишу что-нибудь для дробных чисел. Как разберётесь не много, то уже задавайте более конкретный вопрос поисковику - например ассемблер fadd. Выложу написанный скрипт, как всегда, для понимания - что он делает, прочтите комментарии внутри скрипта. То, что уже комментировал раньше в скрипте не стал комментировать. Закомментировал, только что делают новые опкоды: FLD1, FDIV, FADD, FSTP и FSUBR. 3.2. Вариант с делением шага игрового таймера: пример скрипт "Timer Mission v. timer slowdown v. division step of the game timer". Скрипт 3.2. более универсальный подойдёт как для целых, так и для не целых значений. На видео показана работа скрипта и половина видео посвящена, как отслеживать онлайн значения регистров FPU. Видео: Ну и табличка с 6 скриптами и нужными адресами: Ниже залита табличка со всеми скриптами этой темы.
    2 балла
  4. Выполнял этот запрос - Assassin’s Creed Chronicles: India и решил написать заодно небольшую статейку для новичков. Статья будет короткой, пояснения внутри скриптов, работа скриптов показана на видео. Поиск самих значений таймера в этой статье не рассматривается. По поискам значений есть много статей и видео. Варианты решения задачи с таймером (какой вариант использовать и где, решать Вам). 1. Заморозка таймера. 1.1. С помощь опкода NOP пример скрипт "Timer Mission Freeze v. Nop": 1.2.* С помощью опкода DEC пример скрипт "Timer Mission Freeze v. dec " 2. Обнуление таймера при достижении определённого значения пример скрипт "Timer Mission v. Adding a limit to the timer": 3. Замедление таймера 3.1. Вариант с добавлением дополнительного внутрискриптового таймера: пример скрипт "Timer Mission v. timer slowdown v. Adding a timer inside the script": * - вариант скрипта может приводить в некоторых играх к вылету, в конце в видео я это показал. В этом случае нужно выяснять из-за чего происходит вылет (для данной игры я не делал этого). Но что-то подобное происходило у меня при написании скрипта на патроны для Fallout 3 и там я решил проблемы с вылетами и объяснил почему происходил вылет, если появиться желание можете почитать в той теме - Видео: Ну и сама табличка со скриптами и уже назначенными адресами: PS: Табличку выложил ниже.
    1 балл
  5. И ещё посмотри моё видео (недавно выполнял заказ Stronghold 2 , но из-за поехавших ссылок, спойлеров и кода там сечас чёрт ногу сломит) , может тоже поможет разобраться. А ссылку на видео выложу:
    1 балл
  6. Если эта инструкция работает не только с адресом твоего героя, но и других тварей, то ПКМ по этой инструкции и выбери в контекстном меню "Найти адреса, к которым обращается эта инструкция." В окне появятся адреса жизни твоего Героя и других. Сперва нажми в окне наверху на Адрес, чтобы адреса расположились по возрастанию, а потом построй структуру, выбрав несколько адресов подряд и вот там уже будет понятно через какие офсеты будет идти следующий НПС или через какие поинтеры. ЗЫ: И ещё, если ты найдёшь откуда инструкция получает значение для ESI (т.е. по сути найдёшь следующий поинтер), то это тоже поможет понять, как найти всех тварей.
    1 балл
  7. Зы одну ошибку у себя уже заметил: нужно : control_setCaption(UDF1_CELabel1,"Открыто") Где UDF1 - имя формы. Но если ты используешь строчку из своего скрипта: CELabel1 = component_findComponentByName(CETrainer,"CELabel1") тогда не нужно.
    1 балл
  8. Попробуй. Но сразу предупреждаю - я не знаю LUA.
    1 балл
  9. Вот тут не понятно, зачем ты получаешь указатель на адрес 0x02F4B641 возвращающий значение типа int и присваиваешь ему 0x90909090. Почему для записи байт не использовать WriteProcessMemory? BYTE buffer[] = {0x90,0x90,0x90,0x90}; memcpy((void*)0x2F4B641, &buffer, 4);
    1 балл
  10. fisttp инструкция была добавлена позже других из x86. Многие ассемблеры и дизассемблеры не могут её понять. Тем не менее процессор знает её )) Поэтому можешь попробовать вписывая опкоды. Опкоды Encoding Description DF 08 Store as a truncated WORD DB 08 Store as a truncated DWORD DD 08 Store as a truncated QWORD Пример Examples of using the hand-coding to store the value of ST(0) as a truncated DWORD could be as follows, assuming that int_var would be used as a DWORD integer variable (or [edi+ecx*4] is pointing into an integer DWORD array): lea eax,int_var db 0DBh,8 or lea eax,[edi+ecx*4] dw 8DBh Источник
    1 балл
  11. Ну и для закрепления. Мы написали скрипт, выложили его в паблик и нам пишет ну допустим "Несообразительный пользователь". "Несообразительный пользователь" - "Я включил скрипт, а время не как в игре. Сделайте пожалуйста как в игре. Из сообщения мы понимаем, что пользователь хочет, чтобы таймер был поделён на минуты и секунды. И тут вмешиваетесь Вы, так как уже написали скрипт 2. Обнуление таймера при достижении определённого значения пример скрипт "Timer Mission v. Adding a limit to the timer": Вы - "Это просто, добавим ещё один таймер и каждые 60 секунд будем обнулять секундомер, а минутный таймер увеличивать на 1." Немного подумав, Я - "И это всё? Вы точно всё учли?" И через паузу - "А если "Несообразительный пользователь" активирует скрипт не вначале миссии, когда таймер равен 0, а в середине, например после 10 минут? В этом случае нам нужно разово сделать пересчёт секунд в минуты и остаток записать в секундомер." Итак с первым заданием разобрались. Но "Несообразительный пользователь" не унимается - "Я поставил уровень сложности "Кошмар", а там интерфейса нет, как в Hitman: Absolution и таймера не видно, сделайте мне пожалуйста, чтобы скрипт хотя бы каждую минуту сообщал мне об этом." Итак со вторым заданием тоже всё ясно - нужно добавить какой-нибудь звуковой сигнал и чтобы он звучал каждую минуту. Для этого уже ассемблера СЕ нам не хватит, придётся использовать вставки на LUA. И снова "Несообразительный пользователь" - "И сделайте пожалуйста, чтобы таймер обнулился на 12 минутах, а потом каждые 2 минуты. (время подобрано, чтобы не удлинять видео) Ну вот и третье задание. Сам скрипт на этот раз комментировать не буду. После скрипта опишу некоторые новые опкоды и немного LUA. 4. Скрипт по заданию "Timer Mission v. Sound" Новое на ассемблер: 1. fild dword ptr [timer2] - копируем значение в [timer2] в st(0), сдвигая стек, одновременно переводя значение из Integer во Float. 2. fistp dword ptr [timer2] - выталкиваем из st(0) в [timer2], восстанавливая стек, одновременно переводя значение из Float в Integer, но fistp при этом делает либо усечение (в нашем случае если остаток меньше 30 секунд), либо округление (если больше 30 секунд). На самом деле есть более подходящий для нас опкод fisttp (который отбрасывает дробную часть), но он почему то не компилируется СЕ, поэтому пришлось добавить дополнительные 6 строчек в код: jb @f //1 sub eax,ecx mov [timer3],eax jmp code2 @@: //2 sub [timer2],1 //3 add eax,#60 //4 sub eax,ecx //5 mov [timer3],eax //6 Про вставку на LUA. {$LUA} - выполнить LUA код. {$ASM} - выполнить код на ассемблер СЕ. timer = createTimer(true) - активируем таймер, обратите внимание на это, обязательно деактивируйте таймер при выключении скрипта: [DISABLE] {$LUA} timer:setEnabled(false) timer:setInterval(5) - устанавливаем интервал timer.OnTimer = function() - функция таймера, т.е. что нужно проверять и делать. getAddressList() - функция получающая данные с Вашей таблицы getAddressList().getMemoryRecordByID("63").Value == "59" - проверяет равно ли, значение записи в таблице с ID=63, 59. (в нашем случае это Second Timer). как узнать ID записи в таблице -> посмотрите эту тему - Как посмотреть название, ID и индекс записи в табличке СЕ. Используется LUA-скрипт от MasterGH. PlaySound(findTableFile([[Activate]])) - проигрывание встроенного звука активации скриптов в СЕ, если Вы хотите какой-нибудь другой звук, то посмотрите мой видео урок sleep "1000" - нужен для того, чтобы сигнал прозвучал один раз, уменьшая 1000 Вы можете добиться, чтобы сигнал прозвучал два раза, три и т.д. Если убрать sleep "1000" совсем, то вместо сигнала будет тарахтение в течении 1 секунды. Полностью прокомментировать, что делает скрипт попробуйте сами. На видео показана работа скрипта: И залил табличку со всеми скриптами этой темы. Добавил ещё один скрипт и перезалил табличку в следующем сообщении.
    1 балл
  12. Думаю так: [ENABLE]{$LUA} // переключаемся на LUA ..........// код на LUA{$ASM} // возвращаемя на ASM ..........// код на ASM
    1 балл
  13. Вон оказывается о чем ночью люди думают
    1 балл
  14. вот та видео. В девятой минуте Кенг говорит именно про базовый адрес.
    1 балл
×
×
  • Создать...

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

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