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

Лидеры

  1. Garik66

    Garik66

    Помогаторы


    • Баллы

      7

    • Постов

      5 750


  2. MasterGH

    MasterGH

    Ветераны


    • Баллы

      3

    • Постов

      2 999


  3. partoftheworlD

    partoftheworlD

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


    • Баллы

      1

    • Постов

      2 687


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

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

  1. 1. Как я понял control - это название адреса, который нужно заморозить. Тогда нужно добавить таймер (из 3 скрипта) для проверки условия (условие правильно написано во 2 скрипте), т.е. так: Проверь скрипт. (Возможно, что нужно будет добавить ещё один end. Мне к сожалению скрипт проверить не на чем.) PS: Ниже в видео проверил работу скрипта - скрипт работает. Действительно нужно было добавить один end. (Скрипт поправил здесь же.) 2. Почему скрипт не работает - потому что нужно подключить таймер, чтобы была постоянная проверка условия и его выполнения при активации скрипта. И как оказалось при проверке memoryrecord_freeze работает только с записью в таблице (а не с конкретным статичным или с указателями адресом), т.е. может заморозить адрес (или скрипт) по названию, ID или Index записи. На 3. вопрос пусть ещё кто-нибудь ответит.
    2 балла
  2. С большим количеством адресов работают в окне Structure disscet. Там можно установить адрес структуры данных, размер, тип каждого или всех выделенные адресов. Все выделенные адреса можно через контекстное меню перенести в таблицу CE. Нашли адрес. Перешли в окно структуры Задали структуру адрес-50 и размера 100 (цифры взяты из примера, из первого поста) Тип данных либо автоматически оставить, либо выделить все адреса и поставить byte (раз в примере был adjust address by 1). Выделить все адреса и перенести в таблицу CE. Таким образом 100 адресов типа 1байт можно очень быстро оформить и перенести в таблицу.
    2 балла
  3. Прочитай про недокументированные функции.(NtWow64QueryInformationProcess64 NtWow64ReadVirtualMemory64) Инфы по ним мало. Для чтения из игры x64 можно использовать NtWow64ReadVirtualMemory64 в 32 битном трейнере и окошко будет работать, придется функции руками импортировать из ntdll. И вот статейку глянь.
    1 балл
  4. Ну и напоследок (надеюсь , что напоследок). 3.4. Вариант с использованием функции Sleep. пример скрипт "Timer Mission v. Sleep LUA". Этот метод всё-таки точнее, т.е. Sleep "3000" соответствует ровно 3 сек задержки таймера. Табличку перезалил ниже.
    1 балл
  5. Благодаря gmz и этой теме Sleep для ассемблер СЕ. было найдено ещё одно решение для пункта 3. Замедление таймера 3.3. Вариант с получением времени работы инструкции inc eax (Call GetTickCount64) и с созданием отдельного потока под неё. пример скрипт "Timer Mission v. GetTickCount64". Подробности прочитайте в теме по ссылке.
    1 балл
  6. Я это уже увидел, цикл в том что Inc eax не сработает пока eax не станет равным 1000 - а это всё равно цикл. По-видимому притормаживает, так как визуально в игре пауза около 3-х секунд. gmz, не смотря на все твои: и своеобразную подачу инфы - СПАСИБО тебе большое!!! - часто мне помогаешь. Результат выложил здесь:
    1 балл
  7. Благодаря MasterGH и этой теме - СЕ не хочет компилировать fisttp dword ptr [value] было найдено решение для использования опкода fisttp в СЕ. опкод fisttp для нашего случая = push eax lea eax,[timer2] db DB 08 pop eax Так что выложу новый скрипт: 4.1. Timer Mission v. fisttp И перезалью табличку: перезалил ниже, добавив ещё один скрипт.
    1 балл
  8. Ну и для закрепления. Мы написали скрипт, выложили его в паблик и нам пишет ну допустим "Несообразительный пользователь". "Несообразительный пользователь" - "Я включил скрипт, а время не как в игре. Сделайте пожалуйста как в игре. Из сообщения мы понимаем, что пользователь хочет, чтобы таймер был поделён на минуты и секунды. И тут вмешиваетесь Вы, так как уже написали скрипт 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 балл
×
×
  • Создать...

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

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