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

Foxhound

Пользователи
  • Постов

    114
  • Зарегистрирован

  • Посещение

Весь контент Foxhound

  1. Зачем 5 гигов-то, куда столько? Это ж вся серия небось. В данный момент проверяю на Kursk'43, она вроде метров 300 занимает. А на официальной демке, что я дал ссылку, проверить не хочешь? Практически та же игра, только сценарии другие.
  2. Спасибо. Да уж... Не, для меня это пока слишком сложно. Мне хотелось понять сам принцип, можно ли это сделать и насколько сложно. Такая конструкция статусов применяется нередко. В настоящий момент я пробую на серии стареньких пошаговых стратегий Panzer Campaigns, там всё просто ломается даже для меня. Если хочешь, можешь поэкспериментировать. Официальный сайт серии: http://www.johntillersoftware.com/PanzerCampaigns.html Прямая ссылка на официальный сайт на скачивание полноценной демо (144МВ): http://www.johntillersoftware.com/download/Mius43_101.msi Ну или в "одном хорошем месте", сам знаешь где, есть вся серия. Самодельный скрипт на структуру выделенного в данный момент юнита, подходит почти на любую игру из серии: По адресу pMan+10 - численность юнита, а по адресу pMan+1C - тот самый "побитовый" статус.
  3. Смотри. Скажем, есть юнит в военной игре. У него могут быть разные игровые статусы, положительные и отрицательные: усталость, паника, воодушевление и т.д.. Могут быть также специальные статусы: сапёры разминируют, инженеры наводят понтон, пехота окапывается и т.п.. Все эти статусы одновременно выражены одни числом, каждый бит которого отвечает за наличие/отсутствие отдельного статуса. Например, пехота устала - 01, пехота окапывается - 02, пехота в панике - 04. Тогда усталая пехота в панике будет - 05, а если она при этом ещё и окапывается, то 07 или в двоичной 111, где каждая единица означает есть или нет статус. Так вот как из этого 111 обнулить и заморозить первую и последнюю единицы, не трогая вторую, т.е. убрать усталость и панику, но оставить окапывание? Тоже так подумал (потому и спросил здесь), но не знаю как.
  4. Вопрос в продолжение темы. Как с помощью СЕ можно изменять только один бит? Скажем, значение = FF, т.е. 11111111. Как изменить или заморозить только одну-две-три из этих единичек в произвольных сочетаниях? В игре каждая единичка означает какой-либо статус юнита - положительный, отрицательный или специальный. Нужно иметь возможность фиксировать/менять одни статусы, не трогая другие.
  5. Да! Работает. Закрывал-открывал-переоткрывал окна - всё в порядке. Большое спасибо, теперь смотреть структуры гораздо удобнее.
  6. Попробовал. У меня по-прежнему не работает. В смысле, осталось как и было - пропадает пункт Set Font.
  7. Понимаю. Однако, видишь ли... Человек бескорыстно тратит личное время на мои "хотелки" и с моей стороны ясно обозначить их границы и тем самым упростить задачу без ущерба для конечного результата - элементарный акт вежливости и уважения к чужому труду. Угу?
  8. Да, поэкспериментировал, есть такое. Если закрыть окно Memory Viewer, а потом снова открыть, то пункт меню Set Font во вновь открываемых структурах пропадает и, самое главное, не срабатывает настройка ранее установленного размера шрифта. Если при этом открыть окно Lua Engine, скопировать туда содержимое из GHL_FontInDessectDataForm_CE6_6.lua и выполнить, то пункт меню Set Font снова появляется, опять до закрытия окна Memory Viewer. MasterGH, я очень плохо представляю себе все трудности создания искомого, поэтому могу сказать ерунду, но в качестве предложения: может будет лучше сделать "облегчённый" скрипт вообще без дополнительного пункта выбора шрифта в меню окна структуры, без записи сохранения в файл и пр., а? В смысле, чтобы скрипт только всегда менял шрифт в окне структуры на жёстко прописанный в том же файлике UserSettings.txt или даже в самом скрипте, а устанавливать тип и размер можно будет вручную простым редактированием этого файла. Конечно, отдельный пункт меню для выбора шрифта и когда результат выбора сразу виден на экране это очень удобно и наглядно, но смена шрифта - разовая операция из категории "поставил и забыл" и даже такого неопытного пользователя, как я, совершенно не напрягает один-единственный раз потратить несколько минут на ручное редактирование файла и несколько рестартов СЕ. Словом, лично меня вполне устроил бы такой вариант.
  9. Конечно надо, пусть и в сыром. Работает! Большое спасибо, так стало гораздо удобнее. После закрытия окна структуры появляется окно Lua Engine с текстом "onClose" в поле Output. Это так и задумано, его достаточно просто закрыть и всё?
  10. Спасибо всем откликнувшимся. Первое с моим скромным уровнем знаний для меня нереально, а второе... тоже не подходит. Во, а это интересно. Скачал ту же прогу, что на скрине, всё открыл и попробовал изменить. Тип шрифта сменился, поставил для пробы Arial - стал другим. Уже хорошо. Но если изменить "-15" строчкой выше, то размер шрифта всё равно не меняется. Куда копать дальше? Может ещё какая-нибудь настройка влияет или я вообще не то делаю?
  11. Не, это другое. У меня там и так на минимуме стоит. Нужно уменьшить именно в окне структуры, где раскрашенные адреса. Текст слишком крупный, при просмотре нескольких структур или наползает на соседнюю или приходится прокручивать влево/вправо, по вертикали строк умещается слишком мало. Очень неудобно пользоваться. Для Disassembler и Hexview есть отдельные настройки текста, а для окна структуры я не нашёл. Думал даже, может в файлах программы чего подправить, но увы, не знаю что и где.
  12. Как уменьшить размер шрифта в окне исследования структур? Слишком крупный, а я привык к мелкому, неудобно. Желательно бы ещё и тип шрифта сменить. СЕ 6.6 eng.
  13. Спасибо, очень наглядно. Так... Правильно ли я понял по твоему примеру, что в случае со сдвигом мы определяем состояние только последней (первой?) единицы, которая нас интересует, а остальные как бы отбрасываем, т.е. их состояние роли не играет и может быть каким угодно? А во втором случае, без сдвига, проверка нажатия будет нормально работать только если на месте всех этих "лишних" единичек будут нули, в противном случае мы получим постоянное срабатывание независимо от состояния интересующей нас единицы, поскольку проверяем в т.ч. и "лишние"? ЗЫ. Сорри за корявое изложение.
  14. Спасибо, в целом понятно. Тогда поясни ещё пожалуйста, есть ли принципиальная разница между: call GetAsyncKeyState shr ax,#15 cmp ax,1 jne и call GetAsyncKeyState cmp al,1 jne или например call GetAsyncKeyState test al,al jz Чисто внешне все варианты как-будто работают нормально. Это просто разные способы реализации одного и того же действия или первый вариант со сдвигом предпочтительнее? Если да, то чем?
  15. Работает, спасибо. Ура. Если не трудно, растолкуй, что делает shr ax,#15 поиском я нашёл, что это сдвиг на 15 бит, но так и понял, зачем он применяется и почему именно на 15. В процессе поисков я набрёл на похожую тему на оф. форуме СЕ, там тоже предлагают call GetAsyncKeyState, но там в примерах кода почему-то нет строки "shr ax,#15", после call GetAsyncKeyState сразу идёт сравнение. Тренировка - наше всё, поэтому ради интереса я попробовал в скрипте телепорта убрать строку "shr ax,#15". Проверил - работает и без неё. Но я понимаю, что ты её использовал не просто так, что для чего-то она нужна и без неё что-то будет работать не так. Объясни?
  16. Поясни пожалуйста, в этом месте mov ecx, dword ptr [edx+40] mov ecx, dword ptr [edx+b4] мне не совсем понятно, во второй строке почему [edx+b4], а не [ecx+b4]?
  17. В самой программе - да, для других, но не в игре. Смысл мне видится в том, чтобы в игре была возможность совместить хоткей от СЕ и внутриигровую клавишу выполнения какого-то связанного действия, чтобы работало одно нажатие, а не два разных. В своём скрипте Garik66 очень точно угадал с назначением телепорта на ПКМ. Ты сам видел, что в игре клик по ПКМ используется для указания герою "куда бежать" и герой ничинает движение в указанную точку, а срабатывание телепорта по той же кнопке мгновенно переносит его на позицию, что очень удобно - разок клацнул "родную" кнопку перемещения и уже на месте. Однако в моём варианте скрипта с назначением хоткея на адрес в таблице я столкнулся с тем, что этот номер не проходит - назначить ПКМ не удаётся и приходится для телепорта использовать другую, отдельную клавишу. Это неудобно. Причём ладно если бы сам СЕ не понимал по хоткею нажатие ПКМ, тогда и вопросов бы не было. Но он понимает, показывает назначенную ПКМ в окне и работает с ней как положено. Вот и хотелось бы узнать, можно ли её назначить без "надевания штанов через голову". Ну да ладно, неважно, я понял твою мысль. Лучше расскажи пожалуйста, как изменить код для проверки нажатия не одной, а комбинации двух-трёх клавиш. И ещё, как сделать проверку на разные нажатия, просто повторить код для каждой проверяемой клавиши или нет?
  18. Понял, спасибо. Да, про него. Я понял, что в "push 2" достаточно число 2 заменить на код другой клавиши, это просто, но мне неясно, как, например, я должен изменить код, чтобы проверялось нажатие не одной клавиши, а комбинации из двух-трёх, что-то типа Ctrl+Alt+W? Поясню. Выделяю пункт в таблице, жму Ctrl+H, открывается окно хоткеев, указываю нужное мне действие по нажатию и назначаю любую обычную клавишу, которую можно назначить. Выхожу из окна хоткеев, сохраняю таблицу. Затем в notepad++ открываю сохранённый файл таблицы, нахожу по названию искомый пункт, в нём будет запись вида <Key>ZZZ</Key>, где ZZZ - код назначенной клавиши. Меняю его на 2, сохраняю файл. Открываю изменённую таблицу в СЕ. Теперь в окне хоткеев в поле назначенной клавиши будет "Right MB". Срабатывать как хоткей она будет корректно, штатными средствами СЕ её можно снова заменить на что-то другое, но обратно вернуть уже не получается, только опять через внешний редактор. Меня интересует, можно ли проделать всю эту процедуру назначения ПКМ обычным способом внутри стандартного диалога СЕ, без привлечения сторонних редакторов и пр.?
  19. Всё-таки не совсем ясно. Как я себе представляю, такая проверка нужна для "возвратного" телепорта, когда координаты сначала в произвольный момент записываются, какое-то время хранятся, а потом по нажатию считываются. Тогда, если перепутать последовательность, то при нажатии возврата без первого сохранения позиции считаются нули, так? Но в данном случае перепутать нечего - юзер совершает одно нажатие, а не два, телепорт осуществляется в точку курсора, считываемые координаты постоянно обновляются с момента активации скрипта, а не фиксируются вручную по нажатию сохранения текущей позиции. Получается, в нулевые координаты не прыгнуть. В чём ошибка в моих рассуждениях, поясни[те?] пожалуйста? Ключевое - "если знаешь". Делаю самые первые шаги и то только лишь в СЕ в рамках игрового взлома. Спасибо за пояснения. Это я сразу понял. Просто когда не совсем ясен принцип работы, хочется иметь в запасе вариант собственного осмысленного приготовления, пусть и не лучший, но хотя бы рабочий. Словом, не только рыбу, но и удочку. А то, например, я не знаю, если делать аналогиный телепорт на другую игру, можно ли скопировать этот участок кода неизменным, как шаблон, и если нет, то что менять. В том-то и дело, что в СЕ можно назначить ПКМ на хоткей и она будет работать (проверял), в окошке назначенной клавиши появляется "Right MB", только я не знаю, как это сделать средствами самого СЕ. Может кто-нибудь знает?
  20. Появились вопросы. 1. Объясни пожалуйста работу этой части скрипта: pushad push 2 // 2 - нажата правая клавиша мыши. Вместо мыши можно использовать любую клавишу call GetAsyncKeyState // Блок проверки - какая клавиша нажата? shr ax,#15 cmp ax,1 popad С твоими подсказками вроде общий смысл уяснил, но дьявол в деталях. Хочется понимания как оно работает, а не только брать готовое. 2. В ходе экспериментов я пробовал эту "непонятную" часть изменить на привычную для меня, получилось в итоге вот что: Если вывести в таблицу адрес [LoadCoord] и поставить на него хоткей, устанавливающий значение 2, то скрипт по нажатию хоткея вроде бы телепортирует как надо. Вопрос, правильно ли так делать и не накосячил ли я где-нибудь? 3. Как в таблице по Ctrl+H установить хоткей на ПКМ? Как установить на обычные клавиши понятно, но при нажатии на ПКМ там просто выводится меню Copy/Paste и всё. 4. Поясни, для чего в скрипте нужна проверка: cmp [CoordX],0 je code1 Понимаю, что она делает, но не соображу, зачем. ЗЫ. Почему-то форум не разрешает "спасибки" за посты ставить.
  21. Ого. Впечатляет. Спасибо большое. Это координата по вертикали. Я не стал её приводить потому, что перемещение при вводе координат вручную работает и без неё, а если её саму принудительно поменять вручную, то она тут же восстанавливается, игрок не проваливается и не улетает в небо. Вроде как не нужна. Ну и главное: для меня это намного проще, мне бы для начала с двумя координатами хоть немного разобраться. Спасибо за помощь.
  22. Игра The Guild 2 Renaissance. Пробую сделать телепорт персонажа в точку курсора по нажатию горячей клавиши. Помогите новичку. Координаты курсора нашёл, сделал такой скрипт: Вывел в таблицу показ координат курсора по адресам: [_Cursor]+78 [_Cursor]+80 Потом нашёл координаты персонажа, сделал скрипт: Вывел в таблицу показ текущих координат персонажа по адресам: [_Hero]+5C [_Hero]+64 Теперь если в таблице взять значение из адреса [_Cursor]+78 и вручную вставить в [_Hero]+5C, а из [_Cursor]+80 в [_Hero]+64, то персонаж телепортируется в точку курсора. Как сделать это действие автоматически, по нажатию клавиши? Видеоуроки по телепорту посмотрел, попробовал "подружить" оба скрипта, ничего не получилось, то не работает, то виснет.
  23. К сожалению, этот скрипт не работает, игра вылетает, как только я кликаю по любому юниту, но идею я вроде понял, спасибо за помощь. Поразмыслив и поплясав с бубном, я его немного переделал (перенёс часть в другое место), вот в таком виде скрипт работает: но я не уверен, правильно ли я изменил, хотя оно и заработало. Прокомментируй пожалуйста. Вопрос по aob. Когда я создаю из встроенного шаблона СЕ, то строка aob выглядит так: aobscanmodule(INJECT,kursk43.exe,8B 6F 10 89 44 24 1C) // should be unique а когда из шаблона aamaker, то так: aobscanmodule(INJECT,kursk43.exe+95C8D,8B 6F 10 89) Мне непонятно, почему в первом случае указано "kursk43.exe", а во втором "kursk43.exe+95C8D"? Ведь насколько я понимаю, функция aob как раз и должна сама найти эту часть "+95C8D", зачем же она указана? И ещё. Как в приведённом примере: aobscanmodule(INJECT,kursk43.exe,8B 6F 10 89 44 24 1C) указать не конкретно kursk43.exe, а любой процесс, к которому подсоединён в данный момент СЕ? И если такое возможно, то будет ли это то же самое, что и команда aobscan или есть разница?
  24. Наверное, для меня это пока слишком сложно или я что-то не так делаю. Во всяком случае у меня не получилось, хотя я искал очень долго и терпеливо. Не знаю, важно это для взлома или нет, но в отличие от многих других, особенность этой игры в том, что новые юниты не появляются, сама игра их вообще не генерит никак, там сразу готовые сценарии с уже размещёнными юнитами, иногда сотнями. Параметры и вся иерархия войск записаны заранее в отдельном файле, однотипные юниты неравномерно разбросаны по более крупным соединениям. Например, два совершенно одинаковых по характеристикам батальона могут быть в одной дивизии, а могут принадлежать разным фронтам, начальные параметры и характер их изменения у одного и того же полка в разных сценариях могут сильно отличаться и т.д., всё это жёстко задано изначально, игра просто загружает готовый order of battle. Характеристики каждого отдельного юнита ищутся очень легко, 2-3 отсева, но найти структуры у меня не получилось. Или игра не позволяет, или отсутствие знаний. Автопоиском указатели ищутся тоже легко и при перезапуске сценария указатели не слетают, даже адреса иногда повторяются, но на другом сценарии уже ни один указатель не работает. У меня получилось найти только ту инструкцию, что я привёл, которая обращается к параметрам выбранного в данный момент юнита, своего или чужого, и я хотел параметры привязать к ней, чтобы в таблице был скрипт и список текущих параметров юнита. Параметр в таблице, значение которого меняется в зависимости от выбранного юнита, я сделал, но не знаю, как сделать, чтобы с его помощью менять игровое значение, а не только считывать. Видел возможность менять параметры выбранного игрового объекта во многих готовых таблицах к стратегиям с форума СЕ. Как это можно сделать? Пользуясь случаем, хочу поблагодарить за видеоуроки, отсмотрел почти весь цикл, наглядно и доходчиво. В качестве пожелания: больше уроков, хороших и разных, рассчитанных на начинающих. Что-то типа "маленькие хитрости от больших профи" или вроде того.
×
×
  • Создать...

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

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