• Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
  • Зарегистрироваться
  • Войти
GameHackLab[RU]
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
  • Зарегистрироваться
  • Войти

Изменение счетчика населения при найме юнитов в Stronghold Crusader

Запланировано Прикреплена Закрыта Перенесена Взлом игр (средний уровень и выше)
9 Сообщения 4 Posters 355 Просмотры
Загружаем больше сообщений
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • W
    W00D
    отредактировано 27 нояб. 2024 г., 12:26

    Добрый день! Я делаю свой мод по игре Stronghold Crusader. В игре есть такая особенность при найме любых юнитов, доступные крестьяне у костра превращаются в выбранного юнита и при этом срабатывает счетчик на вычитание единицы из текущего значения населения. А рабочие юниты превращаются из крестьян без вычитания этой единицы - крестьянин просто превращается в работника и идет на работу.

    Я хочу, чтобы военные(нанимаемые) юниты были как гражданские(все рабочие) в плане смерти, найма, роспуска. Чтобы они подчинялись счётчику населения один в один как рабочие, по сути дать им(нанимаемым юнитам) функции рабочих, в плане учета населения только.
    Найм любого военного юнита - приравнять к - когда крестьянин превращается в любого рабочего (новый крестьянин не выходит из донжона, вместо только что ушедшего на работу)/
    Умирает нанятый юнит - приравнять к умирает рабочий(отнимается единичка из населения в книжке внизу)/
    Роспуск(превращение обратно в крестьян) нанятых юнитов - приравнять к заморозке производственного здания(рабочий превращается обратно в крестьянина и идёт к костру) - (прибавление количества крестьян не происходит).

    версия игры 1.41 eng

    Что мне удалось найти в силу моих возможностей:
    Я нашел функцию отвечающую за счетчик текущего населения, но если ее занопить это просто ломает сам счетчик, пробовал менять рядом регисры похожие на sub ...-1, add...1, толку нет.
    f77a3a9a-2d6b-4f1b-b6e0-4536254188b2-image.png

    Нашел так же строчки в коде которые отвечают за смерть всех юнитов(если ее занопить - ни один объект не умирает), пробовал смотреть код рядом но ничего не понятно. Так же нашел строчку кода которая отвечает за роспуск или замораживание здания и превращение юнитов/работников обратно в крестьян, по аналогии сверху толку то не дало.

    Помогите пожалуйста понять где записаны эти счетчики, и как их поменять!

    K 1 ответ Последний ответ 27 нояб. 2024 г., 18:40 Ответить Цитировать 0
    • K
      KRYPTOPUNK @W00D
      отредактировано 27 нояб. 2024 г., 18:40

      @W00D
      Если ты делаешь прям мод, то бывает полезно более глобально посмотреть на код, можешь воспользоваться дизассемблером, таким как GHIDRA, она тебе псевдокод нарисует, какие переменные в функции где и откуда приходят. Попробуй его использовать

      W 1 ответ Последний ответ 27 нояб. 2024 г., 19:22 Ответить Цитировать 0
      • W
        W00D @KRYPTOPUNK
        отредактировано 27 нояб. 2024 г., 19:22

        @KRYPTOPUNK Я в принципе далек от программирования, и знания языков, поэтому самостоятельно мало что пойму, использовал иду. Делаю мод полу-колхозным методом. Мне бы хоть одну из этих функций понять как сделать, остальные думаю по аналогии можно поковырять. Я здесь просто уперся в потолок своих возможностей, мне нужна помощь в конкретном месте.

        K 1 ответ Последний ответ 27 нояб. 2024 г., 21:21 Ответить Цитировать 0
        • K
          KRYPTOPUNK @W00D
          отредактировано 27 нояб. 2024 г., 21:21

          @W00D попробую завтра посмотреть

          1 ответ Последний ответ Ответить Цитировать 1
          • L
            LIRW
            отредактировано 28 нояб. 2024 г., 11:21

            Вот тут по моему код функции на юнитов...

            83 ? ? ? 0F 8D ? ? ? ? 8B 96 ? ? ? ? 69 C0
            

            Принцип работы прост... Висит таймер на регенерацию числа, стоит проверка этого числа и стоит кол на спавн их.. если это число выше указанного, идет пропуск всего этого дела.

            W 1 ответ Последний ответ 28 нояб. 2024 г., 15:25 Ответить Цитировать 0
            • W
              W00D @LIRW
              отредактировано 28 нояб. 2024 г., 15:25

              @LIRW Спасибо за ответ! Я к удивлению копался в этом месте. Там из интересного - это только максимальное количество(24) крестьян у костра, и id юнита(крестьянин) выходящего из донжона, которые можно менять в угоду балансу. Но они по моему не коррелируют с счетчиком населения в книжке внизу.

              L 1 ответ Последний ответ 14 дек. 2024 г., 19:31 Ответить Цитировать 0
              • L
                LIRW @W00D
                отредактировано 14 дек. 2024 г., 19:31

                @W00D Ну так вот это 24 измени... и будет сколько хочешь спавнится. Оно по моему на cmp висит...

                W 1 ответ Последний ответ 16 дек. 2024 г., 19:34 Ответить Цитировать 0
                • P
                  Partizan1078
                  отредактировано 15 дек. 2024 г., 22:26

                  Хз что за версия.....

                  [ENABLE]
                  aobscanmodule(ogran,Stronghold Crusader.exe,0F ? ? ? ? ? ? 01 ? 0F ? ? ? ? ? ? 8B ? ? ? ? ? ? FF)
                  alloc(newmem,$1000)
                  label(return)
                  registersymbol(ogran)
                  
                  newmem:
                    mov word ptr [eax+000001AA],#100
                    movsx edx,word ptr [eax+000001AA]
                    jmp return
                  
                  ogran:
                    jmp newmem
                    nop 2
                  return:
                  
                  [DISABLE]
                  ogran:
                  db 0F BF 90 AA 01 00 00
                  unregistersymbol(ogran)
                  dealloc(newmem)
                  {
                  // ORIGINAL CODE - INJECTION POINT: Stronghold Crusader.exe+230A7
                  Stronghold Crusader.exe+23077: 66 39 9C 31 A8 01 00 00  - cmp [ecx+esi+000001A8],bx
                  Stronghold Crusader.exe+2307F: 8D 8C 31 A8 01 00 00     - lea ecx,[ecx+esi+000001A8]
                  Stronghold Crusader.exe+23086: 7E 09                    - jle "Stronghold Crusader.exe"+23091
                  Stronghold Crusader.exe+23088: 66 83 01 FF              - add word ptr [ecx],-01
                  Stronghold Crusader.exe+2308C: A1 E8 63 B9 00           - mov eax,["Stronghold Crusader.exe"+7963E8]
                  Stronghold Crusader.exe+23091: 69 C0 2C 03 00 00        - imul eax,eax,0000032C
                  Stronghold Crusader.exe+23097: 8B D5                    - mov edx,ebp
                  Stronghold Crusader.exe+23099: 69 D2 F4 39 00 00        - imul edx,edx,000039F4
                  Stronghold Crusader.exe+2309F: 03 C6                    - add eax,esi
                  Stronghold Crusader.exe+230A1: 8D 8A B4 82 19 01        - lea ecx,[edx+"Stronghold Crusader.exe"+D982B4]
                  // ---------- INJECTING HERE ----------
                  Stronghold Crusader.exe+230A7: 0F BF 90 AA 01 00 00     - movsx edx,word ptr [eax+000001AA]
                  // ---------- DONE INJECTING  ----------
                  Stronghold Crusader.exe+230AE: 01 11                    - add [ecx],edx
                  Stronghold Crusader.exe+230B0: 0F BF 80 E6 00 00 00     - movsx eax,word ptr [eax+000000E6]
                  Stronghold Crusader.exe+230B7: 8B 0C 85 A8 89 5B 00     - mov ecx,[eax*4+"Stronghold Crusader.exe"+1B89A8]
                  Stronghold Crusader.exe+230BE: FF D1                    - call ecx
                  Stronghold Crusader.exe+230C0: 8B 0D E8 63 B9 00        - mov ecx,["Stronghold Crusader.exe"+7963E8]
                  Stronghold Crusader.exe+230C6: 8B D1                    - mov edx,ecx
                  Stronghold Crusader.exe+230C8: 69 D2 2C 03 00 00        - imul edx,edx,0000032C
                  Stronghold Crusader.exe+230CE: 66 39 9C 32 E4 00 00 00  - cmp [edx+esi+000000E4],bx
                  Stronghold Crusader.exe+230D6: 8D 04 32                 - lea eax,[edx+esi]
                  Stronghold Crusader.exe+230D9: 0F 84 2A 02 00 00        - je "Stronghold Crusader.exe"+23309
                  }
                  
                  1 ответ Последний ответ Ответить Цитировать 1
                  • W
                    W00D @LIRW
                    отредактировано W00D 16 дек. 2024 г., 19:34

                    @LIRW Это вообще не то, что я описал, что хочу сделать.

                    1 ответ Последний ответ Ответить Цитировать 0
                    • Первое сообщение
                      Последнее сообщение