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

Foxhound

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

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

  • Посещение

Сообщения, опубликованные Foxhound

  1. Just now, what228 said:

    Ухх 5 гигов

     

    Зачем 5 гигов-то, куда столько? Это ж вся серия небось. В данный момент проверяю на Kursk'43, она вроде метров 300 занимает.
    А на официальной демке, что я дал ссылку, проверить не хочешь? Практически та же игра, только сценарии другие.

  2. Just now, keng said:

    Все.

     

    Спасибо.
    Да уж... Не, для меня это пока слишком сложно.

     

     

    Just now, what228 said:

    На какой игре это ты хочешь проделать? Хочу проверить и отпишусь если что.
    Ну и если можно то дать не много данных :D а то самому искать с нуля не очень хочетЦа.

     

    Мне хотелось понять сам принцип, можно ли это сделать и насколько сложно. Такая конструкция статусов применяется нередко. В настоящий момент я пробую на серии стареньких пошаговых стратегий Panzer Campaigns, там всё просто ломается даже для меня. Если хочешь, можешь поэкспериментировать.
    Официальный сайт серии:
    http://www.johntillersoftware.com/PanzerCampaigns.html
    Прямая ссылка на официальный сайт на скачивание полноценной демо (144МВ):
    http://www.johntillersoftware.com/download/Mius43_101.msi
    Ну или в "одном хорошем месте", сам знаешь где, есть вся серия.
    Самодельный скрипт на структуру выделенного в данный момент юнита, подходит почти на любую игру из серии:

    Spoiler
    
    [ENABLE]
    
    aobscan(INJECT,8B 6F 10 89 44 24 1C 03 C2)
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    label(pMan)
    registersymbol(pMan)
    registersymbol(INJECT)
    
    newmem:
    
    pMan:
    
     dd 0
    
    code:
        mov ebp,[edi+10]
        mov [pMan],edi
        mov [esp+1C],eax
        jmp return
    
    INJECT:
    	jmp code
    	nop
    	nop
    
    return:
    
    [DISABLE]
    
    INJECT:
    	mov ebp,[edi+10]
    	mov [esp+1C],eax
    
    unregistersymbol(pMan)
    unregistersymbol(INJECT)
    dealloc(newmem)
    

     

    По адресу pMan+10 - численность юнита, а по адресу pMan+1C - тот самый "побитовый" статус.

  3. Just now, what228 said:

    Можно попонятнее?)

     

    Смотри. Скажем, есть юнит в военной игре. У него могут быть разные игровые статусы, положительные и отрицательные: усталость, паника, воодушевление и т.д.. Могут быть также специальные статусы: сапёры разминируют, инженеры наводят понтон, пехота окапывается и т.п.. Все эти статусы одновременно выражены одни числом, каждый бит которого отвечает за наличие/отсутствие отдельного статуса. Например, пехота устала - 01, пехота окапывается - 02, пехота в панике - 04. Тогда усталая пехота в панике будет - 05, а если она при этом ещё и окапывается, то 07 или в двоичной 111, где каждая единица означает есть или нет статус. Так вот как из этого 111 обнулить и заморозить первую и последнюю единицы, не трогая вторую, т.е. убрать усталость и панику, но оставить окапывание?

     

     

    Just now, keng said:

    Побитовым сдвигом в скрипте, как мне кажется. Команды "SHL"/"SHR".

     

    Тоже так подумал (потому и спросил здесь), но не знаю как.

  4. Вопрос в продолжение темы.
    Как с помощью СЕ можно изменять только один бит? Скажем, значение = FF, т.е. 11111111. Как изменить или заморозить только одну-две-три из этих единичек в произвольных сочетаниях?
    В игре каждая единичка означает какой-либо статус юнита - положительный, отрицательный или специальный. Нужно иметь возможность фиксировать/менять одни статусы, не трогая другие.

  5. Just now, Garik66 said:

    Не забывай Мастер проф.разработчик и думаю что не любит "облегчённые" варианты и скорее всего доведёт плагин до ума.

     

    Понимаю. Однако, видишь ли... Человек бескорыстно тратит личное время на мои "хотелки" и с моей стороны ясно обозначить их границы и тем самым упростить задачу без ущерба для конечного результата - элементарный акт вежливости и уважения к чужому труду. Угу? :)

  6. 18 hours ago, MasterGH said:

    контекстное меню "Set Font" то ставится, то не ставится на разные окна после их закрытия

     

    Да, поэкспериментировал, есть такое. Если закрыть окно Memory Viewer, а потом снова открыть, то пункт меню Set Font во вновь открываемых структурах пропадает и, самое главное, не срабатывает настройка ранее установленного размера шрифта. Если при этом открыть окно Lua Engine, скопировать туда содержимое из GHL_FontInDessectDataForm_CE6_6.lua и выполнить, то пункт меню Set Font снова появляется, опять до закрытия окна Memory Viewer.


    MasterGH, я очень плохо представляю себе все трудности создания искомого, поэтому могу сказать ерунду, но в качестве предложения: может будет лучше сделать "облегчённый" скрипт вообще без дополнительного пункта выбора шрифта в меню окна структуры, без записи сохранения в файл и пр., а? В смысле, чтобы скрипт только всегда менял шрифт в окне структуры на жёстко прописанный в том же файлике UserSettings.txt или даже в самом скрипте, а устанавливать тип и размер можно будет вручную простым редактированием этого файла. Конечно, отдельный пункт меню для выбора шрифта и когда результат выбора сразу виден на экране это очень удобно и наглядно, но смена шрифта - разовая операция из категории "поставил и забыл" и даже такого неопытного пользователя, как я, совершенно не напрягает один-единственный раз потратить несколько минут на ручное редактирование файла и несколько рестартов СЕ. Словом, лично меня вполне устроил бы такой вариант.

  7. 17 hours ago, MasterGH said:

    Если надо в сыром варианте

     

    Конечно надо, пусть и в сыром. Работает! Большое спасибо, так стало гораздо удобнее.
    После закрытия окна структуры появляется окно Lua Engine с текстом "onClose" в поле Output. Это так и задумано, его достаточно просто закрыть и всё?

  8. Спасибо всем откликнувшимся.

     

    19 minutes ago, SER[G]ANT said:

    Можно скомпилировать текущую версию из SVN, либо ждать выхода 6.7

     

    Первое с моим скромным уровнем знаний для меня нереально, а второе... тоже не подходит. :)

     

    10 minutes ago, SER[G]ANT said:

    Или можно пропатчить текущую версию при помощи редактора ресурсов.

     

    Во, а это интересно. Скачал ту же прогу, что на скрине, всё открыл и попробовал изменить. Тип шрифта сменился, поставил для пробы Arial - стал другим. Уже хорошо. Но если изменить "-15" строчкой выше, то размер шрифта всё равно не меняется. Куда копать дальше? Может ещё какая-нибудь настройка влияет или я вообще не то делаю?

  9. Just now, keng said:

    Edit -> Settings -> General Settings -> Override the default font.

     

    Не, это другое. У меня там и так на минимуме стоит.
    Нужно уменьшить именно в окне структуры, где раскрашенные адреса. Текст слишком крупный, при просмотре нескольких структур или наползает на соседнюю или приходится прокручивать влево/вправо, по вертикали строк умещается слишком мало. Очень неудобно пользоваться. Для Disassembler и Hexview есть отдельные настройки текста, а для окна структуры я не нашёл. Думал даже, может в файлах программы чего подправить, но увы, не знаю что и где.

  10. Just now, keng said:

    То есть когда ноль везде - то это однозначно ноль, а когда есть хоть где-нибудь единица - то уже НЕ ноль. А нас интересует только самый последний бит.

     

    Уяснил, спасибо за науку. :)

    • Плюс 1
  11. Just now, keng said:

    Вот пример.

     

    Спасибо, очень наглядно.
    Так... Правильно ли я понял по твоему примеру, что в случае со сдвигом мы определяем состояние только последней (первой?) единицы, которая нас интересует, а остальные как бы отбрасываем, т.е. их состояние роли не играет и может быть каким угодно? А во втором случае, без сдвига, проверка нажатия будет нормально работать только если на месте всех этих "лишних" единичек будут нули, в противном случае мы получим постоянное срабатывание независимо от состояния интересующей нас единицы, поскольку проверяем в т.ч. и "лишние"? ЗЫ. Сорри за корявое изложение.

  12. 28 minutes ago, keng said:

    для наших нужд вполне сгодится

     

    Спасибо, в целом понятно.

     

    Тогда поясни ещё пожалуйста, есть ли принципиальная разница между:

        call GetAsyncKeyState
        shr ax,#15
        cmp ax,1

        jne

    и

        call GetAsyncKeyState
        cmp al,1

        jne

    или например

        call GetAsyncKeyState
        test al,al
        jz

    Чисто внешне все варианты как-будто работают нормально. Это просто разные способы реализации одного и того же действия или первый вариант со сдвигом предпочтительнее? Если да, то чем?

  13. 16 hours ago, Garik66 said:

    Ctrl+Numpad1

     

    Работает, спасибо. Ура. :)

     

    Если не трудно, растолкуй, что делает
    shr ax,#15
    поиском я нашёл, что это сдвиг на 15 бит, но так и понял, зачем он применяется и почему именно на 15. В процессе поисков я набрёл на похожую тему на оф. форуме СЕ, там тоже предлагают call GetAsyncKeyState, но там в примерах кода почему-то нет строки "shr ax,#15", после call GetAsyncKeyState сразу идёт сравнение. Тренировка - наше всё, поэтому ради интереса я попробовал в скрипте телепорта убрать строку "shr ax,#15". Проверил - работает и без неё. Но я понимаю, что ты её использовал не просто так, что для чего-то она нужна и без неё что-то будет работать не так. Объясни?

  14. Just now, Dison said:

    скрипт

     

    Поясни пожалуйста, в этом месте
    mov ecx, dword ptr [edx+40]
    mov ecx, dword ptr [edx+b4]
    мне не совсем понятно, во второй строке почему [edx+b4], а не [ecx+b4]?

  15. 1 hour ago, what228 said:

    Скорее всего нет и смысла в этом нет. Я тебе дал уже ответ. В программе клавиши мыши используются для других функций да и смысла в этом нет.

     

    В самой программе - да, для других, но не в игре. Смысл мне видится в том, чтобы в игре была возможность совместить хоткей от СЕ и внутриигровую клавишу выполнения какого-то связанного действия, чтобы работало одно нажатие, а не два разных. В своём скрипте Garik66 очень точно угадал с назначением телепорта на ПКМ. Ты сам видел, что в игре клик по ПКМ используется для указания герою "куда бежать" и герой ничинает движение в указанную точку, а срабатывание телепорта по той же кнопке мгновенно переносит его на позицию, что очень удобно - разок клацнул "родную" кнопку перемещения и уже на месте. Однако в моём варианте скрипта с назначением хоткея на адрес в таблице я столкнулся с тем, что этот номер не проходит - назначить ПКМ не удаётся и приходится для телепорта использовать другую, отдельную клавишу. Это неудобно. Причём ладно если бы сам СЕ не понимал по хоткею нажатие ПКМ, тогда и вопросов бы не было. Но он понимает, показывает назначенную ПКМ в окне и работает с ней как положено. Вот и хотелось бы узнать, можно ли её назначить без "надевания штанов через голову".
    Ну да ладно, неважно, я понял твою мысль. :)

     

    Лучше расскажи пожалуйста, как изменить код для проверки нажатия не одной, а комбинации двух-трёх клавиш.
    И ещё, как сделать проверку на разные нажатия, просто повторить код для каждой проверяемой клавиши или нет?

  16. 16 minutes ago, what228 said:

    Проверка нужна чтоб не прыгнуть в 0,0,0 координаты но как ты заметил то в случае с этим скриптом такого случится не может т.к. идет запись а потом лишь перемещение. Но все же лучше когда есть проверки чтоб отсечь все возможные ошибки.

     

    Понял, спасибо.

     

    17 minutes ago, what228 said:

    Если ты про код с клавишей то копируй сколько влезет.

     

    Да, про него. Я понял, что в "push 2" достаточно число 2 заменить на код другой клавиши, это просто, но мне неясно, как, например, я должен изменить код, чтобы проверялось нажатие не одной клавиши, а комбинации из двух-трёх, что-то типа Ctrl+Alt+W?

     

     

    1 minute ago, Xipho said:

    Противоречие какое-то.

     

    Поясню. Выделяю пункт в таблице, жму Ctrl+H, открывается окно хоткеев, указываю нужное мне действие по нажатию и назначаю любую обычную клавишу, которую можно назначить. Выхожу из окна хоткеев, сохраняю таблицу. Затем в notepad++ открываю сохранённый файл таблицы, нахожу по названию искомый пункт, в нём будет запись вида <Key>ZZZ</Key>, где ZZZ - код назначенной клавиши. Меняю его на 2, сохраняю файл. Открываю изменённую таблицу в СЕ. Теперь в окне хоткеев в поле назначенной клавиши будет "Right MB". Срабатывать как хоткей она будет корректно, штатными средствами СЕ её можно снова заменить на что-то другое, но обратно вернуть уже не получается, только опять через внешний редактор.
    Меня интересует, можно ли проделать всю эту процедуру назначения ПКМ обычным способом внутри стандартного диалога СЕ, без привлечения сторонних редакторов и пр.?

  17. 7 hours ago, Xipho said:

    Эта проверка нужна для того, чтобы не прыгнуть в нулевые координаты, если юзер после активации телепорта случайно нажмет возврат к позиции не успев эту самую позицию сохранить.

     

    Всё-таки не совсем ясно. Как я себе представляю, такая проверка нужна для "возвратного" телепорта, когда координаты сначала в произвольный момент записываются, какое-то время хранятся, а потом по нажатию считываются. Тогда, если перепутать последовательность, то при нажатии возврата без первого сохранения позиции считаются нули, так? Но в данном случае перепутать нечего - юзер совершает одно нажатие, а не два, телепорт осуществляется в точку курсора, считываемые координаты постоянно обновляются с момента активации скрипта, а не фиксируются вручную по нажатию сохранения текущей позиции. Получается, в нулевые координаты не прыгнуть. В чём ошибка в моих рассуждениях, поясни[те?] пожалуйста?

     

    7 hours ago, Xipho said:

    Здесь все просто, если знаешь основы программирования на ассемблере вообще, и под винду в частности.

     

    Ключевое - "если знаешь". :) Делаю самые первые шаги и то только лишь в СЕ в рамках игрового взлома. Спасибо за пояснения.

     

     

    6 hours ago, Garik66 said:

    Но можешь просто заменить в АА-скрипте код клавиши (push 2 -замени 2 на код нужной клавиши).

     

    Это я сразу понял. Просто когда не совсем ясен принцип работы, хочется иметь в запасе вариант собственного осмысленного приготовления, пусть и не лучший, но хотя бы рабочий. Словом, не только рыбу, но и удочку. :) А то, например, я не знаю, если делать аналогиный телепорт на другую игру, можно ли скопировать этот участок кода неизменным, как шаблон, и если нет, то что менять.

     

    6 hours ago, Garik66 said:

    Скорее всего в СЕ не предусмотрено это, я сам ни разу не назначал клавиши мыши в таблице, поэтому точно не знаю.

     

    В том-то и дело, что в СЕ можно назначить ПКМ на хоткей и она будет работать (проверял), в окошке назначенной клавиши появляется "Right MB", только я не знаю, как это сделать средствами самого СЕ.
    Может кто-нибудь знает?

  18. 4 hours ago, Garik66 said:

     

     

    Появились вопросы. :)

    1. Объясни пожалуйста работу этой части скрипта:
        pushad
        push 2                       // 2 - нажата правая клавиша мыши. Вместо мыши можно использовать любую клавишу
        call GetAsyncKeyState        // Блок проверки - какая клавиша нажата?
        shr ax,#15
        cmp ax,1
        popad
    С твоими подсказками вроде общий смысл уяснил, но дьявол в деталях. Хочется понимания как оно работает, а не только брать готовое.

     

    2. В ходе экспериментов я пробовал эту "непонятную" часть изменить на привычную для меня, получилось в итоге вот что:

    Spoiler
    
    [ENABLE]
    aobscanmodule(INJECT6,GuildII.exe+44D20,8bxxxx83xxxx3bxx74xx68xxxxxxxx8d)
    aobscanmodule(INJECT7,GuildII.exe+146668,8bxxxx8bxxxxxx6axx8dxxxxxxxxxxxxxx8bxxxx8d)
    alloc(newmem,$1000)
    label(newmem1)
    label(code)
    label(return)
    label(code1)
    label(return1)
    label(CoordX)
    label(CoordY)
    label(LoadCoord)
    registersymbol(LoadCoord)
    registersymbol(INJECT6)
    registersymbol(INJECT7)
    
    
    newmem:
    
        cmp [LoadCoord],2
        jne code
        mov eax,[ebp+78]
        mov [CoordX],eax
        mov eax,[ebp+80]
        mov [CoordY],eax
        mov [LoadCoord],1
    
    code:
    	mov eax,[ebp+70]
    	or edi,-01
    	jmp return
    
    newmem1:
        cmp [CoordX],0
        je code1
        cmp [LoadCoord],1
        jne code1
        mov eax,[CoordX]
        mov [esi+5c],eax
        mov eax,[CoordY]
        mov [esi+64],eax
        mov [LoadCoord],0
    
    code1:
    	mov eax,[esi+54]
    	mov ebp,[esp+14]
    	jmp return1
    
    
    CoordX:
        dd 0
    CoordY:
        dd 0
    LoadCoord:
        dd 0
    
    INJECT6:
    	jmp newmem
    	db 90
    return:
    
    INJECT7:
    	jmp newmem1
    	db 90 90
    return1:
    
    [DISABLE]
    INJECT6:
    	mov eax,[ebp+70]
    	or edi,-01
    INJECT7:
    	mov eax,[esi+54]
    	mov ebp,[esp+14]
    
    unregistersymbol(LoadCoord)
    unregistersymbol(INJECT6)
    unregistersymbol(INJECT7)
    dealloc(newmem)
    

     

    Если вывести в таблицу адрес [LoadCoord] и поставить на него хоткей, устанавливающий значение 2, то скрипт по нажатию хоткея вроде бы телепортирует как надо. Вопрос, правильно ли так делать и не накосячил ли я где-нибудь?

     

    3. Как в таблице по Ctrl+H установить хоткей на ПКМ? Как установить на обычные клавиши понятно, но при нажатии на ПКМ там просто выводится меню Copy/Paste и всё.

     

    4. Поясни, для чего в скрипте нужна проверка:
        cmp [CoordX],0
        je code1
    Понимаю, что она делает, но не соображу, зачем.


    ЗЫ. Почему-то форум не разрешает "спасибки" за посты ставить.

  19. Just now, what228 said:

    Видео работы:

     

    Просто игру скачал и проверил.

     

    Ого. Впечатляет. :) Спасибо большое.

     

     

    Just now, Garik66 said:

    А про третью координату я и не знал, так как об этом и не писали.

     

    Это координата по вертикали. Я не стал её приводить потому, что перемещение при вводе координат вручную работает и без неё, а если её саму принудительно поменять вручную, то она тут же восстанавливается, игрок не проваливается и не улетает в небо. Вроде как не нужна. Ну и главное: для меня это намного проще, мне бы для начала с двумя координатами хоть немного разобраться. :) Спасибо за помощь.

  20. Игра The Guild 2 Renaissance. Пробую сделать телепорт персонажа в точку курсора по нажатию горячей клавиши. Помогите новичку.
    Координаты курсора нашёл, сделал такой скрипт:

    Spoiler
    
    [ENABLE]
    
    aobscanmodule(INJECT6,GuildII.exe+44D20,8bxxxx83xxxx3bxx74xx68xxxxxxxx8d)
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    label(_Cursor)
    registersymbol(_Cursor)
    registersymbol(INJECT6)
    
    newmem:
    
    _Cursor:
    
        dd 0
    
    code:
        mov [_Cursor],ebp
    	mov eax,[ebp+70]
    	or edi,-01
    	jmp return
    
    INJECT6:
    	jmp code
    	nop
    
    return:
    
    [DISABLE]
    
    INJECT6:
    	mov eax,[ebp+70]
    	or edi,-01
    
    unregistersymbol(_Cursor)
    unregistersymbol(INJECT6)
    dealloc(newmem)

     

    Вывел в таблицу показ координат курсора по адресам:
    [_Cursor]+78
    [_Cursor]+80
    Потом нашёл координаты персонажа, сделал скрипт:

    Spoiler
    
    [ENABLE]
    
    aobscanmodule(INJECT7,GuildII.exe+146668,8bxxxx8bxxxxxx6axx8dxxxxxxxxxxxxxx8bxxxx8d)
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    label(_Hero)
    registersymbol(_Hero)
    registersymbol(INJECT7)
    
    newmem:
    
    _Hero:
    
       dd 0
    
    code:
    	mov [_Hero],esi
    	mov eax,[esi+54]
    	mov ebp,[esp+14]
    	jmp return
    
    INJECT7:
    	jmp code
    	nop
    	nop
    
    return:
    
    [DISABLE]
    
    INJECT7:
    	mov eax,[esi+54]
    	mov ebp,[esp+14]
    
    unregistersymbol(_Hero)
    unregistersymbol(INJECT7)
    dealloc(newmem)

     

    Вывел в таблицу показ текущих координат персонажа по адресам:
    [_Hero]+5C
    [_Hero]+64
    Теперь если в таблице взять значение из адреса [_Cursor]+78 и вручную вставить в [_Hero]+5C, а из [_Cursor]+80 в [_Hero]+64, то персонаж телепортируется в точку курсора.
    Как сделать это действие автоматически, по нажатию клавиши? Видеоуроки по телепорту посмотрел, попробовал "подружить" оба скрипта, ничего не получилось, то не работает, то виснет.

  21. 7 hours ago, Garik66 said:

    Добавь в таблицу адрес с адресом "Amount" и названием например "Нужное количество юнитов" - по умолчанию в нём будет 100.

     

    К сожалению, этот скрипт не работает, игра вылетает, как только я кликаю по любому юниту, но идею я вроде понял, спасибо за помощь. Поразмыслив и поплясав с бубном, я его немного переделал (перенёс часть в другое место), вот в таком виде скрипт работает:

    Spoiler
    
    [ENABLE]
    alloc(newMem, 2048)
    label(returnHere)
    label(Amount)
    registersymbol(Amount)
    
    newMem:
        push [Amount]
        pop [edi+10]
        mov ebp,[edi+10]
        mov [esp+1C],eax
        jmp returnHere
    
    Amount:
        dd #100
    
    kursk43.exe+95C8D:
        jmp newMem
        nop
        nop
    
    returnHere:
    
    [DISABLE]
    kursk43.exe+95C8D:
        mov ebp,[edi+10]
        mov [esp+1C],eax
    unregistersymbol(Amount)
    dealloc(newMem)

     

    но я не уверен, правильно ли я изменил, хотя оно и заработало. Прокомментируй пожалуйста.


    Вопрос по 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 или есть разница?

  22. 1 hour ago, keng said:

    Привет! Я бы пошел другим путем - предположив, что юниты явно хранятся в каких-нибудь коллекциях (например, в массивах), я нашел бы характеристики одного юнита (текущее здоровье, к примеру), затем - массив, в котором хранится тип этого юнита и все эти юниты соответственно, а затем - функцию, которая создает новые юниты этого типа и записывает их в массив. В этой функции явно будут читаться минимальные и максимальные значения всех параметров в зависимости от типа создаваемого юнита.

     

    Наверное, для меня это пока слишком сложно или я что-то не так делаю. Во всяком случае у меня не получилось, хотя я искал очень долго и терпеливо.
    Не знаю, важно это для взлома или нет, но в отличие от многих других, особенность этой игры в том, что новые юниты не появляются, сама игра их вообще не генерит никак, там сразу готовые сценарии с уже размещёнными юнитами, иногда сотнями. Параметры и вся иерархия войск записаны заранее в отдельном файле, однотипные юниты неравномерно разбросаны по более крупным соединениям. Например, два совершенно одинаковых по характеристикам батальона могут быть в одной дивизии, а могут принадлежать разным фронтам, начальные параметры и характер их изменения у одного и того же полка в разных сценариях могут сильно отличаться и т.д., всё это жёстко задано изначально, игра просто загружает готовый order of battle. Характеристики каждого отдельного юнита ищутся очень легко, 2-3 отсева, но найти структуры у меня не получилось. Или игра не позволяет, или отсутствие знаний. Автопоиском указатели ищутся тоже легко и при перезапуске сценария указатели не слетают, даже адреса иногда повторяются, но на другом сценарии уже ни один указатель не работает.
    У меня получилось найти только ту инструкцию, что я привёл, которая обращается к параметрам выбранного в данный момент юнита, своего или чужого, и я хотел параметры привязать к ней, чтобы в таблице был скрипт и список текущих параметров юнита. Параметр в таблице, значение которого меняется в зависимости от выбранного юнита, я сделал, но не знаю, как сделать, чтобы с его помощью менять игровое значение, а не только считывать. Видел возможность менять параметры выбранного игрового объекта во многих готовых таблицах к стратегиям с форума СЕ. Как это можно сделать?


    Пользуясь случаем, хочу поблагодарить за видеоуроки, отсмотрел почти весь цикл, наглядно и доходчиво. В качестве пожелания: больше уроков, хороших и разных, рассчитанных на начинающих. Что-то типа "маленькие хитрости от больших профи" или вроде того. :)

×
×
  • Создать...

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

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