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

SergBrNord

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

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

  • Посещение

  • Победитель дней

    12

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

  1. Гарик, в общем я попробовал сделать всё это. Игра вылетает до функций чтения и записи здоровья, которые мы используем. Т.е. - набежал на здоровье - и в момент разрушения объекта игра крашится. Брекпоинт не срабатывал на инструкции записи. На инструкцию чтения брекпоинт поставить сложновато - там постоянно чтение идёт.

  2. 9 часов назад, Garik66 сказал:

    SerBrNord, есть конечно, но всё индивидуально.

    Ты выяснил, из-за какого скрипта начинаются глюки/вылеты? -> Выложи этот скрипт. Посмотрим.

     

    Да банально. Берём тот же скрипт Лирва.

    Скрытый текст
    
    [ENABLE]
    
    aobscanmodule(Base,SamHD_TSE.exe,39 86 * * * * 75 * 8B CE E8 * * * * 85 C0 75)
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
      push ecx
      mov ecx,[esi+58]
      cmp [ecx],79616C50
      jne code
      mov [esi+00000488],#99     //Heath
      mov [esi+0000049C],#98     //Armor
      mov [esi+00000A10],#199    //shotsgun + db shotgun
      mov [esi+00000A20],#998    //tompson + minigan
      mov [esi+00000A30],#99     //rocketlauncher
      mov [esi+00000A40],#99     //grenadegun
      mov [esi+00000A50],#998    //flamethrower
      mov [esi+00000A60],#799    //lasergun
      mov [esi+00000A70],#59     //SBC
      mov [esi+00000A80],#99     //sniper rifle
      mov [esi+00000A90],#4      //bomb
    
    
    code:
      pop ecx
      cmp [esi+00000498],eax
      jmp return
    
    Base:
      jmp newmem
      nop
    return:
    registersymbol(Base)
    
    [DISABLE]
    
    Base:
      db 39 86 98 04 00 00
    
    unregistersymbol(Base)
    dealloc(newmem)

     

    Собственно, какие глюки я пока выловил: падение при использовании рычага, падение при подбирании бонуса +100 к здоровью (выглядит как большое сердце), внезапно начинающееся дерганье камеры вверх-вниз, ну и отдельный случай был - падение при открытии статистики по уровню.

     

    В SS:FE такой ерунды нет, хотя скрипты написаны на ту же функцию игры.

  3. Гарик, а есть метод/методы отловить, что неправильно делает скрипт? В чём дело - у меня появилось времени немного пробегать в игрушке и выяснилось - спустя некоторое время камера начинает либо бешено трястись, либо игра зависает/крашится. Крашнуться она может, например, при подборе здоровья или на ровном месте. Вот, собственно, хочется отследить этот момент.

     

    P.S.

    В моём другом скрипте, для SS:FE такого не происходит. Хотя логика скриптов такая же и внедряется в аналогичные куски кода.

  4. Что собственно, получилось:

    Скрытый текст
    
    { Game   : SamHD_TSE.exe
      Version: 
      Date   : 2016-03-22
      Author : SergBrNord
    }
    
    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
    
     
     
    aobscanmodule(TELEPORT,SamHD_TSE.exe,F3 0F 11 45 FC F3 A5 76) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    label(saveCRDS)
    label(tflag)
    
    newmem:
      cmp byte ptr[tflag], 0
      je code
    
      cmp byte ptr [tflag], 1
      jne @F
      push edx
      mov edx, [eax+3C]
      mov [saveCRDS], edx
      mov edx, [eax+40]
      mov [saveCRDS+4], edx
      mov edx, [eax+44]
      mov [saveCRDS+8], edx
      pop edx
      mov byte ptr [tflag], 0
    
    @F:
      cmp byte ptr[tflag], 2
      jne code
      push edx
      mov edx, [saveCRDS]
      mov [eax+3C], edx
      mov edx, [saveCRDS+4]
      mov [eax+40], edx
      mov edx, [saveCRDS+8]
      mov [eax+44], edx
      pop edx
      mov byte ptr [tflag], 0
    
    code:
      movss [ebp-04],xmm0
      jmp return
    
    tflag:
      db 00
    
    saveCRDS:
     db 00 00 00 00 00 00 00 00 00 00 00 00
    
    TELEPORT:
      jmp newmem
    return:
    registersymbol(TELEPORT)
    registersymbol(tflag)
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    TELEPORT:
      db F3 0F 11 45 FC
    
    unregistersymbol(TELEPORT)
    unregistersymbol(tflag)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "SamHD_TSE.exe"+FF96E
    
    "SamHD_TSE.exe"+FF946: D9 83 B0 09 00 00        -  fld dword ptr [ebx+000009B0]
    "SamHD_TSE.exe"+FF94C: 8B 83 24 01 00 00        -  mov eax,[ebx+00000124]
    "SamHD_TSE.exe"+FF952: 0F 57 C0                 -  xorps xmm0,xmm0
    "SamHD_TSE.exe"+FF955: D9 5D E0                 -  fstp dword ptr [ebp-20]
    "SamHD_TSE.exe"+FF958: D9 45 E0                 -  fld dword ptr [ebp-20]
    "SamHD_TSE.exe"+FF95B: 8D 70 2C                 -  lea esi,[eax+2C]
    "SamHD_TSE.exe"+FF95E: DD 05 30 50 B9 00        -  fld qword ptr [SamHD_TSE.exe+795030]
    "SamHD_TSE.exe"+FF964: B9 07 00 00 00           -  mov ecx,00000007
    "SamHD_TSE.exe"+FF969: DF F1                    -  fcomip st(0),st(1)
    "SamHD_TSE.exe"+FF96B: 8D 7D BC                 -  lea edi,[ebp-44]
    // ---------- INJECTING HERE ----------
    "SamHD_TSE.exe"+FF96E: F3 0F 11 45 FC           -  movss [ebp-04],xmm0
    // ---------- DONE INJECTING  ----------
    "SamHD_TSE.exe"+FF973: F3 A5                    - repe  movsd 
    "SamHD_TSE.exe"+FF975: 76 08                    -  jna SamHD_TSE.exe+FF97F
    "SamHD_TSE.exe"+FF977: D8 6D D0                 -  fsubr dword ptr [ebp-30]
    "SamHD_TSE.exe"+FF97A: D9 5D FC                 -  fstp dword ptr [ebp-04]
    "SamHD_TSE.exe"+FF97D: EB 02                    -  jmp SamHD_TSE.exe+FF981
    "SamHD_TSE.exe"+FF97F: DD D8                    -  fstp st(0)
    "SamHD_TSE.exe"+FF981: F3 0F 10 45 D0           -  movss xmm0,[ebp-30]
    "SamHD_TSE.exe"+FF986: 8B B3 48 07 00 00        -  mov esi,[ebx+00000748]
    "SamHD_TSE.exe"+FF98C: 8B BB 4C 07 00 00        -  mov edi,[ebx+0000074C]
    "SamHD_TSE.exe"+FF992: 8D 45 E8                 -  lea eax,[ebp-18]
    }

     

     

    Ссылка на таблицу

    • Плюс 2
  5. В общем, практически зеркально повторилась ситуация с нахождением инструкции по здоровью. Скриншот с остановом по X в предыдущем посте я заскринил неправильно и позже это понял. Однако это привело к пониманию, что структура с  координатами лежит в EAX.

    Скрытый текст

    9919b5aa0a7fa60285c5.jpg

     

    Кстати, в ESI лежит практически то же самое...

  6. Вот нашёл координаты и посмотрел в памяти что где:

    Скрытый текст

    994490905436c65f8581.jpg

     

    Поставил останов на X:

    Скрытый текст

    1b897e3aac3b94920733.jpg

     

    Останов на Y:

    Скрытый текст

    f3472e05b2438c5ceffc.jpg

     

    Останов на Z:

    Скрытый текст

    927d5c2fe3cefd668ec4.jpg

    Собственно, с какой инструкции начать работать лучше? Я не вижу ни одной подходящей

     

    Upd.

    Пока буду работать с X, так как Z - бессмысленно; Y - в структуре чушь.

  7. В 20.03.2016в18:43, Garik66 сказал:

    Перед проверкой адресов заморозкой, останется около 160 адресов, среди них есть искомая координата Z, при заморозке которой ГГ не будет опускаться вниз и подниматься вверх, в регионе памяти найдёшь и другие координаты.

    Но правда тебе это ни чего не даст, поймёшь, когда увидишь инструкции работающие с этими адресами.

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

    Появилось наконец-то время, сейчас попробую. Правда есть опасения, что таким образом я выйду на функцию, отвечающую за полёт в чит режиме.

     

    Я подобным образом уже пробовал делать - брал тот же уровень и нырял в яму с водой. Но при заморозке значений игра любила вылетать =)

  8. Скажем так, на твоём месте я бы пошёл в ЖДшку, а сам начал бы что-то читать дома. Но! В данном варианте требуется сильный внутренний стержень (чтобы пинать себя и заставлять кодить) + неплохо бы иметь знакомых, которые учились или лучше - учатся (работают) прямо сейчас на программиста, чтобы получить структурированные знания путём следования учебной программе + конспекты ненужные можно пострелять (у меня так лежит отличнейший конспект по ТРПО). 

    Кроме этого, советую разузнать, чему там, собственно, учат, ибо заведение заведению рознь. И если есть вариант сразу поступить в высшее учебное заведение - поступай. Я вот так в среднем специальном выучился, потом пошел в универ - а там та же ерунда в 5 лет. В сухом остатке - зря потерянное время. Есть, конечно, вариант окончить среднее специальное и пойти на заочное обучение, но тут надо быть уверенным, что тебя со средним специальным возьмут на работу по специальности.

    А вот с этим в малых городах большие проблемы - я так мыкался по слабо связанным со моей специальностью работам, ибо все требуют высшее образование, причём, корка нужна ТУПО для соответствия списочному составу организации в разрезе специализаций и больше ни для чего. Поэтому, если идёшь на заочное - у тебя должны быть подвязки либо место, куда возьмут, либо ты должен быть лёгок на подъём, дабы переехать в место, где такая работа есть, либо уже трудоустроен =)

     

    P.S.

    Плюсы от учёбы в средних специальных - время идёт в трудовой стаж и получаешь в процессе учёбы рабочие специальности (одну или две).

  9. 7 часов назад, Garik66 сказал:

    Нет не пробовал.

    А что нужна помощь?

    Они скорее всего в той же структуре будут.

    Я не могу выйти на адрес хотя бы одной координаты - пытался сделать так же как на видео у Xipho, но ничего не замораживается. Не могу понять, что же делаю не так?...

  10. 1 час назад, Garik66 сказал:

    Просто взял инструкцию на чтение игры (их две - можно любую) в отдладчике, ПКМ по ней, из контекстного меню выбрал строчку "Найти адреса, к которым обращается эта инструкция" и после этого подобрал сперва одно оружие в игре, которого у меня не было - вышел на адрес, подобрал второе - стало сразу понятно, а потом уже вручную менял значение в адресе в таблице, следуя двоичной сиситеме.

    Я так понимаю, одна из них та, на которую ты второй вариант скрипта писал?

     

    1 час назад, Garik66 сказал:

    Кстати там много чего таким образом можно найти.

    Например явно виден адрес счётчика нахождения секретных вещей, короче поэкспериментируй, там много чего есть.

    Гарик, а ты пробовал координаты поискать? Я пробовал как на видео у Xipho, но у меня из получившихся значений ничто не оказалось координатами игрока.

  11. 11 час назад, Garik66 сказал:

    Добавил в скрипт, добавление оружия без его подбора в игре:

      Показать содержимое
    
    
    { Game   : SamHD_TSE.exe
      Version: 
      Date   : 2016-03-18
      Author : Garik66
    
      This script does blah blah blah
    }
    
    [ENABLE]
    aobscanmodule(GodMod,SamHD_TSE.exe,39 86 98 04 00 00) // should be unique
    alloc(newmem,$1000)
    label(code)
    label(return)
    label(flag)
    registersymbol(GodMod)
    
    newmem:
      mov ecx,[esi+58]
      cmp [ecx],79616C50
      jne code
                                 // Блок - бесконечные НР, Armor и Ammo
      mov [esi+00000488],#99     //Heath
      mov [esi+0000049C],#98     //Armor
      mov [esi+00000A10],#199    //shotsgun + db shotgun
      mov [esi+00000A20],#998    //tompson + minigan
      mov [esi+00000A30],#99     //rocketlauncher
      mov [esi+00000A40],#99     //grenadegun
      mov [esi+00000A50],#998    //flamethrower
      mov [esi+00000A60],#799    //lasergun
      mov [esi+00000A70],#59     //SBC
      mov [esi+00000A80],#99     //sniper rifle
      mov [esi+00000A90],#4      //bomb
    
                                 // Блок - разового добавления Weapon
      cmp [flag],1
      jne code
      mov [esi+ad8],#32767       // Weapon, откуда цифра смотри следующий спойлер.
      mov [flag],0
    
    code:
      cmp [esi+00000498],eax
      jmp return
    
    flag:
    dd 1
    
    GodMod:
      jmp newmem
      nop
    return:
    
    [DISABLE]
    GodMod:
      db 39 86 98 04 00 00
    
    unregistersymbol(GodMod)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "SamHD_TSE.exe"+6BBA6
    
    "SamHD_TSE.exe"+6BB80: 74 10                 -  je SamHD_TSE.exe+6BB92
    "SamHD_TSE.exe"+6BB82: 83 BE 38 08 00 00 00  -  cmp dword ptr [esi+00000838],00
    "SamHD_TSE.exe"+6BB89: 74 07                 -  je SamHD_TSE.exe+6BB92
    "SamHD_TSE.exe"+6BB8B: 8B CE                 -  mov ecx,esi
    "SamHD_TSE.exe"+6BB8D: E8 1E 46 FF FF        -  call SamHD_TSE.exe+601B0
    "SamHD_TSE.exe"+6BB92: 8B CE                 -  mov ecx,esi
    "SamHD_TSE.exe"+6BB94: E8 B7 FD 02 00        -  call SamHD_TSE.exe+9B950
    "SamHD_TSE.exe"+6BB99: 8D BE 88 04 00 00     -  lea edi,[esi+00000488]
    "SamHD_TSE.exe"+6BB9F: 8B CF                 -  mov ecx,edi
    "SamHD_TSE.exe"+6BBA1: E8 4A 0B 48 00        -  call SamHD_TSE.exe+4EC6F0
    // ---------- INJECTING HERE ----------
    "SamHD_TSE.exe"+6BBA6: 39 86 98 04 00 00     -  cmp [esi+00000498],eax
    // ---------- DONE INJECTING  ----------
    "SamHD_TSE.exe"+6BBAC: 75 0B                 -  jne SamHD_TSE.exe+6BBB9
    "SamHD_TSE.exe"+6BBAE: 8B CE                 -  mov ecx,esi
    "SamHD_TSE.exe"+6BBB0: E8 2B AE 00 00        -  call SamHD_TSE.exe+769E0
    "SamHD_TSE.exe"+6BBB5: 85 C0                 -  test eax,eax
    "SamHD_TSE.exe"+6BBB7: 75 19                 -  jne SamHD_TSE.exe+6BBD2
    "SamHD_TSE.exe"+6BBB9: 8B 16                 -  mov edx,[esi]
    "SamHD_TSE.exe"+6BBBB: 8B 82 B8 06 00 00     -  mov eax,[edx+000006B8]
    "SamHD_TSE.exe"+6BBC1: 8B CE                 -  mov ecx,esi
    "SamHD_TSE.exe"+6BBC3: FF D0                 -  call eax
    "SamHD_TSE.exe"+6BBC5: 8B CF                 -  mov ecx,edi
    }

     

     

      Показать содержимое
    
    
    Двоичная система (часто используется в играх)
    
    2Е0 =    1 - нож              1
    2Е1 =    2 - пила             3
    2Е2 =    4 - 1 пистолет       7  
    2Е3 =    8 - 2 пистолета     15
    2Е4 =   16 - дробовик        31
    2Е5 =   32 - двустволка      63  
    2Е6 =   64 - автомат        127   
    2Е7 =  128 - миниган        255
    2Е8 =  256 - гранатомёт     511
    2Е9 =  512 - ракетница     1023
    2Е10= 1024 - огнемёт       2047
    2Е11= 2048 - лазер         4095    
    2Е12= 4096 - пушка         8191
    2Е13= 8192 - снайперка    16383     
    2Е14=16384 - бомбочка     32767
    2Е15=32768 -              65535(вроде не появляется ничё)
    
    Судя по Вики всего 15 видов оружия.

     

     

    Как я понял, ты сравнением структур нашёл это значение?

    • Плюс 1
  12.  

    34 минуты назад, LIRW сказал:

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

    А как на эту инструкцию выйти? Пробовал посмотреть, что патроны меняет - вылезает та же инструкция что и на ХП.

     

    3 минуты назад, Garik66 сказал:

    SergBrNord,

    ну наконец то понял, что ты пишешь для этой игры.

    По видимому ты так же как и я - "шмоточник" в играх и любишь проходить по максимуму, т.е. ты хочешь подобрать в игре максимум (всё) снаряжение и за это получить очки опыта. Я так тебя понял?

    А так как шмотка подбирается,только если её не максимум, то ты и хочешь, чтобы значение всегда было меньше на 1.

    Сейчас дошёл в игре до пирамиды и понял, как это можно сделать.

    Нам не обязательно добавлять предметы в скрипте для этого - их лучше в твоём случае подбирать в игре, а вот записывать нужные значения нужно после проверки флага, который мы с тобой нашли, т.е., если во флаге 0, то пока не трогаем значение в скрипте, если 1, то пишем меньше на 1 от максимального.   

    Если не справишься, то помогу написать такой скрипт.

    Ну, по сути да. Только там за подбор очки даются и нахождение секретов. И я планировал для начала понять, как правильно замораживать только здоровье. Потом ради интереса подтянулась броня и до кучи - оружие. Теперь и телепорт хочу сделать Только я вот не понимаю, про какой флаг речь?

     

     

    Ну и нашёл патроны ко всему оружию:

    Скрытый текст
    
    { Game   : SamHD_TSE.exe
      Version:
      Date   : 2016-03-17
      Author : LIRW
    
      This script does blah blah blah
    }
    
    [ENABLE]
    
    aobscanmodule(Base,SamHD_TSE.exe,39 86 * * * * 75 * 8B CE E8 * * * * 85 C0 75)
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
      push ecx
      mov ecx,[esi+58]
      cmp [ecx],79616C50
      jne code
      mov [esi+00000488],#99     //Heath
      mov [esi+0000049C],#98     //Armor
      mov [esi+00000A10],#199    //shotsgun + db shotgun
      mov [esi+00000A20],#998    //tompson + minigan
      mov [esi+00000A30],#99     //rocketlauncher
      mov [esi+00000A40],#99     //grenadegun
      mov [esi+00000A50],#998    //flamethrower
      mov [esi+00000A50],#799    //lasergun
      mov [esi+00000A70],#59     //SBC
      mov [esi+00000A80],#99     //sniper rifle
      mov [esi+00000A90],#4     //bomb
    
    
    code:
      pop ecx
      cmp [esi+00000498],eax
      jmp return
    
    Base:
      jmp newmem
      nop
    return:
    registersymbol(Base)
    
    [DISABLE]
    
    Base:
      db 39 86 98 04 00 00
    
    unregistersymbol(Base)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "SamHD_TSE.exe"+6E756
    
    "SamHD_TSE.exe"+6E730: 74 10                 -  je SamHD_TSE.exe+6E742
    "SamHD_TSE.exe"+6E732: 83 BE 38 08 00 00 00  -  cmp dword ptr [esi+00000838],00
    "SamHD_TSE.exe"+6E739: 74 07                 -  je SamHD_TSE.exe+6E742
    "SamHD_TSE.exe"+6E73B: 8B CE                 -  mov ecx,esi
    "SamHD_TSE.exe"+6E73D: E8 5E 46 FF FF        -  call SamHD_TSE.exe+62DA0
    "SamHD_TSE.exe"+6E742: 8B CE                 -  mov ecx,esi
    "SamHD_TSE.exe"+6E744: E8 E7 FB 02 00        -  call SamHD_TSE.exe+9E330
    "SamHD_TSE.exe"+6E749: 8D BE 88 04 00 00     -  lea edi,[esi+00000488]
    "SamHD_TSE.exe"+6E74F: 8B CF                 -  mov ecx,edi
    "SamHD_TSE.exe"+6E751: E8 FA 60 48 00        -  call SamHD_TSE.exe+4F4850
    // ---------- INJECTING HERE ----------
    "SamHD_TSE.exe"+6E756: 39 86 98 04 00 00     -  cmp [esi+00000498],eax
    // ---------- DONE INJECTING  ----------
    "SamHD_TSE.exe"+6E75C: 75 0B                 -  jne SamHD_TSE.exe+6E769
    "SamHD_TSE.exe"+6E75E: 8B CE                 -  mov ecx,esi
    "SamHD_TSE.exe"+6E760: E8 9B 1E 00 00        -  call SamHD_TSE.exe+70600
    "SamHD_TSE.exe"+6E765: 85 C0                 -  test eax,eax
    "SamHD_TSE.exe"+6E767: 75 19                 -  jne SamHD_TSE.exe+6E782
    "SamHD_TSE.exe"+6E769: 8B 16                 -  mov edx,[esi]
    "SamHD_TSE.exe"+6E76B: 8B 82 B8 06 00 00     -  mov eax,[edx+000006B8]
    "SamHD_TSE.exe"+6E771: 8B CE                 -  mov ecx,esi
    "SamHD_TSE.exe"+6E773: FF D0                 -  call eax
    "SamHD_TSE.exe"+6E775: 8B CF                 -  mov ecx,edi
    }

     

     

  13. 7 минут назад, Garik66 сказал:

    вот здесь уже выложены многие из них, но от структуры самого НР

     

     

    Гарик, я понял, как Джери вышел на другую инструкцию и собираюсь чуть попозже попробовать самому.

    Я имел ввиду, как перейти к месту, изменяемому скриптом. Собственно, какой выход я нашёл:

    Открывается Memory Viewer -> Копируется адрес из скрипта ("SamHD_TSE.exe"+4F483A) -> ПКМ -> Вставляется адрес.

  14. 5 минут назад, LIRW сказал:

    Я даже Игорь не проверял - ну я в обще только помочь темой по игре хотел и не более того... Щас проверю ваш скрипт... Отпишусь тогда. 

    Я просто подумал тему то вам дал со скриптом :( а оказалось в обще не то... Извиняюсь ещо раз.  Жалко вот тут нету на сайте такого кода в который я вставляю ссылки, а то уже второй раз путаюсь.

    Только предупреждаю - при внедрении в тот участок кода лучше не использовать Серьёзную Пушку (которая ядрами стреляет) - в момент выстрела игра просто крашится. Я так и не смог отловить из-за чего.

     

    А за ссылки спасибо - почитал. Одна тема, фактически повтор урока от Xipho с Ютутба; ну а во второй теме посмотрел скрипт на старую версию игры, заодно в ней ссылка на тему туториала есть.

     

    Правда, на этом моменте у меня мозг немного переклинило:

    Цитата

    Now back to the case. If You have clicked on more information, You can see the code that You have examined and the value of the registers. Make sure to remember what is between the [ ] and what is the value of the register. Now click on "Hex" left to the value box in CE, type in the value of the register and search for it. You have found the address of the pointer. Click on "Add address manually". Select pointer, and type in the address of the pointer that You have found. If You have done it right, You have added an address to the table which will "track" the location of Your health, wherever it is. 

     Я не могу сообразить где тут собака зарыта? Мы находим значение регистра. Но смысл? Нет, ну я, конечно, пробовал сделать так в Сэме но получилась чушь в 2к+ адресов, практически не отсеивающаяся.

     

    P.S.

    Я, наверное, не увидел ответа на вопрос, поэтому повторюсь - как, имея в скрипте цепочку байт (GodMod,SamHD_TSE.exe,CC 8B 01 33 C1 39 41 04 ), по это цепочки в Memory Viewer выйти на нужный участок кода?

  15.  

    22 часа назад, Garik66 сказал:

    Вопрос не понял, лучше на примере скрипта покажи, что имеешь ввиду.

    Имеется AOB-скрипт, есть цепочка байт. Как по этой цепочке выйти на тот участок кода через Memory Viewer, который он изменяет?

     

    3 часа назад, LIRW сказал:

    Всё фильтра сидят делают. 

    В этой игре  за базовый адрес можно взять регистр esi - его даже игра использует на жизни. 

    От него в смещении esi + 58 хранятся ID персонажей. Но так как СЕ не может добавить 'PlayerPuppet' за место фильтра, то его перевести надо из текста в какой не будь указатель и поставить сравнение на нем. Это отделит врагов от персонажа. 

    Броня хранится в смещении +49С а жизнь в смещении + 488  Всем максимальные характеристики того или иного, хранятся там же. Это сидеть надо и смотреть.

    В итоге получается: 

    Вот эта инструкция сравнения на HP персонажа, срабатывает при врубления отладчика на жизни персонажа  cmp [esi+00000498],eax  видать сравнение жизни в eax лежит 64 - а то есть в 10_ом 100

    Выложи свой скрипт, пожалуйста. Объясни, как ты на эту инструкцию вышел-то? Хотя бы на адрес в игре посмотреть - пробовал то скрипт от Гери - у меня он не работает.

  16. 2 часа назад, Garik66 сказал:

    И кстати нашёл по поводу сверки шиврованного значения в игре (о чём тоже писал ранее), вот это место в коде:

    
    SamHD_TSE.exe+4EC6F4 - 39 41 04                - cmp [ecx+04],eax
    SamHD_TSE.exe+4EC6F7 - 74 0A                   - je SamHD_TSE.exe+4EC703
    SamHD_TSE.exe+4EC6F9 - C7 05 68A2F500 01000000 - mov [SamHD_TSE.exe+B5A268],00000001 { [00000001] }
    SamHD_TSE.exe+4EC703 - 8B 01                   - mov eax,[ecx]

    Как видим, если не совпадают, то записывается по адресу  SamHD_TSE.exe+B5A268 1 и наверное что-то должно произойти, скорее всего вылет из игры.

    Так что эту проверку можно отключить просто заменив 74 на EB (т.е. je на jmp).

    Сделал так, чтобы инструкция постоянно срабатывала - ничего не произошло. Скучно =(

     

    1 час назад, Garik66 сказал:

    Написал скрипт от читающий инструкции, без вылетов, добавляется бронька до её подбора.

    При активации скрипта НР будет подыматься до максимальной  (в зависимости от сложности игры) и потом опять откатываться на #99.

    Попробуй скрипт:

      Показать содержимое
    
    
    { Game   : SamHD_TSE.exe
      Version: 
      Date   : 2016-03-17
      Author : Garik66
    
      This script does blah blah blah
    }
    
    [ENABLE]
    
    aobscanmodule(GodMod,SamHD_TSE.exe,CC 8B 01 33 C1 39 41 04) // should be unique
    alloc(newmem,$1000)
    label(code)
    label(return)
    registersymbol(GodMod)
    
    newmem:
      cmp edi,1
      jne code
      cmp [ecx+A0],2
      jne @f
      mov [ecx],#99      // НР
      jmp code
    
    @@:
      cmp [ecx+2C], 1
      jne code
      mov [ecx],#99      // Armor
    
    
    code:
      mov eax,[ecx]
      xor eax,ecx
      cmp [ecx+04],eax
      jmp return
    
    GodMod+01:
      jmp newmem
      nop
      nop
    return:
    
    [DISABLE]
    GodMod+01:
      db 8B 01 33 C1 39 41 04
    
    unregistersymbol(GodMod)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "SamHD_TSE.exe"+4EC6F0
    
    "SamHD_TSE.exe"+4EC6DA: 8B 55 08                       -  mov edx,[ebp+08]
    "SamHD_TSE.exe"+4EC6DD: 89 01                          -  mov [ecx],eax
    "SamHD_TSE.exe"+4EC6DF: 8B 12                          -  mov edx,[edx]
    "SamHD_TSE.exe"+4EC6E1: 8B 12                          -  mov edx,[edx]
    "SamHD_TSE.exe"+4EC6E3: 33 C1                          -  xor eax,ecx
    "SamHD_TSE.exe"+4EC6E5: 89 51 08                       -  mov [ecx+08],edx
    "SamHD_TSE.exe"+4EC6E8: 89 41 04                       -  mov [ecx+04],eax
    "SamHD_TSE.exe"+4EC6EB: 5D                             -  pop ebp
    "SamHD_TSE.exe"+4EC6EC: C2 08 00                       -  ret 0008
    "SamHD_TSE.exe"+4EC6EF: CC                             -  int 3 
    // ---------- INJECTING HERE ----------
    "SamHD_TSE.exe"+4EC6F0: 8B 01                          -  mov eax,[ecx]
    "SamHD_TSE.exe"+4EC6F2: 33 C1                          -  xor eax,ecx
    "SamHD_TSE.exe"+4EC6F4: 39 41 04                       -  cmp [ecx+04],eax
    // ---------- DONE INJECTING  ----------
    "SamHD_TSE.exe"+4EC6F7: 74 0A                          -  je SamHD_TSE.exe+4EC703
    "SamHD_TSE.exe"+4EC6F9: C7 05 68 A2 F5 00 01 00 00 00  -  mov [SamHD_TSE.exe+B5A268],00000001
    "SamHD_TSE.exe"+4EC703: 8B 01                          -  mov eax,[ecx]
    "SamHD_TSE.exe"+4EC705: C3                             -  ret 
    "SamHD_TSE.exe"+4EC706: CC                             -  int 3 
    "SamHD_TSE.exe"+4EC707: CC                             -  int 3 
    "SamHD_TSE.exe"+4EC708: CC                             -  int 3 
    "SamHD_TSE.exe"+4EC709: CC                             -  int 3 
    "SamHD_TSE.exe"+4EC70A: CC                             -  int 3 
    "SamHD_TSE.exe"+4EC70B: CC                             -  int 3 
    }

     

     

    Броня работает, здоровье отказывается уменьшаться. Сейчас пофикшу.

     

    UPD.

    Заставил здоровье прибавляться, но изменение здоровья каким-то образом уменьшает коэффициент входящего урона в монстров. Посмотрю xor-ы.

     

    1 час назад, Garik66 сказал:

    А супер-оружие это которое на дне первого озера подбираем?

    Это пушка, стреляющая ядрами. буквально =)

    Скрытый текст

    latest?cb=20110827181444&path-prefix=ru

    Вот линк на мои сейвы. Самый первый - там пушка уже есть. Только сохранено рядом с монстром.

    https://www.dropbox.com/s/f0obmwevlkmb8qn/SeriousSamHD_TSE.rar?dl=0

     

    P.S.

    А можно ли перемещаться от скрипта к участку кода, который он изменяет? 

  17. 33 минуты назад, Garik66 сказал:

    Если ты уже нашёл фильтр для патронов, то всё просто:

    
      cmp [ecx+...], ...// Здесь твой фильтр для срабатывания инструкции на патронах любого оружия - фильтр нужно подобрать один для всех видов. 
      jne code
      mov eax,[ecx]    // Здесь загружаем предыдущее значение, но в данной игре возможно патроны не будут меняться не только при выстреле, 
                       // но и при подборе, поэтому проще написать сразу нужное количество  mov eax,#100.
    code:
      mov [ecx],eax
      jmp return

    Хотя для данной игры можно просто записывать при срабатывании инструкции на здоровье (так как фильтр для здоровья уже есть), просто обновляться значение патронов будут, только, когда по ГГ проходит урон. и проблема ещё в этом случае будет в том, что придётся записывать для каждого оружия своё смещение.

     

     

    Я, нашёл их чуть ранее. Начинаются с 588, чередуются через смещение в 6.

     

    В 15.03.2016в15:35, SergBrNord сказал:

    Покопался и нашел смещения, хранящие значения патронов для оружия:

      Скрыть содержимое

    [ECX] + ...

    588 - дробовик/двустволка

    798 - миниган/автомат

    5А8 - ракеты

    5B8 - гранатомёт

    5C8 - огнемёт

    5D8 - лазерное ружьё

    5E8 - серьёзная пушка

    5F8 - снайперская винтовка

    608 - серьёзная бомба

     

    Скрытый текст

    6737cf34a31d882c6bf2.jpg

     

     

    Проблема в том, что у разного оружия - разные пределы патронов + идёт варьирование значения от сложности игры(!) :

    Скрытый текст

     

    дробовик/двустволка - 200;

    миниган/автомат - 999;

    ракеты - 100;

    гранаты - 100;

    огнемёт - 999;

    лазерное ружьё - 800;

    серьёзная пушка - 60;

    снайперская винтовка - 100;

    серьёзная бомба - 5.

     

    И вот тут возникает трудность - как сделать так, чтобы смотрелось нормально. Можно, конечно всему пихать по 5 патронов...

     

    23 минуты назад, Garik66 сказал:

    Вот точно какая проблема есть в скрипте - это в сигнатуре, проверил её, а она не уникальна, т.е.:

    по сигнатуре 8B 55 08 89 01 8B находятся 4 адреса (это тоже может приводить к вылетам):

    
    sl = AOBScan("8B 55 08 89 01 8B");
    
    Found: 4 
    008EC6DA 
    68849F9E 
    688C5353 
    693307A7 

    А каким образом это проверять?

  18. 2 минуты назад, Garik66 сказал:

    Да нету там пролёта - через двойной фильтр проходит только НР нашего героя (и больше никакого адреса) . Ну поменял так поменял.

    И esi=1 при работе с бронькой тоже правильный фильтр, только что проверил (установил игру без патча).

    У меня пролетало. Я в конце-концов плюнул и начал поштучно отлавливать монстров, находить их ХП и смотреть в структуре - меняется ли значение от моего урона. Как я понял есть несколько классов монстров и класс игрока игра также считает за монстра, монстра с параметром брони.

     

    А вот как лучше заморозить значение патронов в оружии, если в структуре игрока хранятся сведения о количестве, но нет максимального (я пока не нашёл)?

  19. 49 минуты назад, Garik66 сказал:

    опробовал?

    Да, опробовал. Заодно выполз пролёт с регистрами. При вычислении здоровья противников eax и esi также одинаковы. Теперь скрипт выглядит так и работает корректно (кроме пушки - так и не понял, как починить):

     

    Скрытый текст
    
    { Game   : SamHD_TSE.exe
      Version:
      Date   : 2016-03-16
      Author : Garik66 & SergBrNord
    
      This script does 99 HP & 98 ARM all time
    }
    
    [ENABLE]
    
    aobscanmodule(SAM_HP_ARM,SamHD_TSE.exe,8B 55 08 89 01 8B) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    label(flag)
    
    newmem:
      mov edx, [ebp+08]  //Ставим инъекцию здесь, чтобы не захватывало иного кода
      cmp [ecx+A0], 2    //Фильтр №1 на игрока
      jne @f             //Прыжок на безымяную метку (не совпадает)
      cmp [ecx+A4], #45  //Фильтр №2 на игрока
      jne @f        //Прыжок на безымяную метку (не совпадает)
      mov eax, #99
      cmp [flag], 1
      jne @f
      mov [ecx+14], #98
      sub [ecx+18], 24  // Меняем указатель на DD4-DB0 = 24
      mov [ecx+1C], 1  //Пишем тот флаг
      mov [flag], 0
      jmp code
    
    @@:
      cmp [ecx+2C], 1
      jne code
      cmp [ecx+40], #16
      jne code
      mov eax, #98
    
    code:
      mov [ecx],eax
      jmp return
    
    flag:
    dd 1
    
    SAM_HP_ARM:
      jmp newmem
    return:
    registersymbol(SAM_HP_ARM)
    
    [DISABLE]
    
    SAM_HP_ARM:
      db 8B 55 08 89 01
    
    unregistersymbol(SAM_HP_ARM)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "SamHD_TSE.exe"+4F483A
    
    "SamHD_TSE.exe"+4F4829: 5D                             -  pop ebp
    "SamHD_TSE.exe"+4F482A: C2 04 00                       -  ret 0004
    "SamHD_TSE.exe"+4F482D: CC                             -  int 3
    "SamHD_TSE.exe"+4F482E: CC                             -  int 3
    "SamHD_TSE.exe"+4F482F: CC                             -  int 3
    "SamHD_TSE.exe"+4F4830: 55                             -  push ebp
    "SamHD_TSE.exe"+4F4831: 8B EC                          -  mov ebp,esp
    "SamHD_TSE.exe"+4F4833: 8B 45 0C                       -  mov eax,[ebp+0C]
    "SamHD_TSE.exe"+4F4836: 39 01                          -  cmp [ecx],eax
    "SamHD_TSE.exe"+4F4838: 74 11                          -  je SamHD_TSE.exe+4F484B
    // ---------- INJECTING HERE ----------
    "SamHD_TSE.exe"+4F483A: 8B 55 08                       -  mov edx,[ebp+08]
    "SamHD_TSE.exe"+4F483D: 89 01                          -  mov [ecx],eax
    // ---------- DONE INJECTING  ----------
    "SamHD_TSE.exe"+4F483F: 8B 12                          -  mov edx,[edx]
    "SamHD_TSE.exe"+4F4841: 8B 12                          -  mov edx,[edx]
    "SamHD_TSE.exe"+4F4843: 33 C1                          -  xor eax,ecx
    "SamHD_TSE.exe"+4F4845: 89 51 08                       -  mov [ecx+08],edx
    "SamHD_TSE.exe"+4F4848: 89 41 04                       -  mov [ecx+04],eax
    "SamHD_TSE.exe"+4F484B: 5D                             -  pop ebp
    "SamHD_TSE.exe"+4F484C: C2 08 00                       -  ret 0008
    "SamHD_TSE.exe"+4F484F: CC                             -  int 3
    "SamHD_TSE.exe"+4F4850: 8B 01                          -  mov eax,[ecx]
    "SamHD_TSE.exe"+4F4852: 33 C1                          -  xor eax,ecx
    }

     

     

  20. 19 час назад, Garik66 сказал:

    у меня в игре не проскакивали другие адреса, правда из СУПЕР-Пушек я не стрелял.

    Я тут кое-что прояснил по пушке...Игра крашится даже при попытке нахождения всех опкодов, имеющих доступ к адресу патронов пушки. Если учитывать, что до CE 6.4 игра тупо падала даже при подключении отладчика - то явно проблема в кривом коде игры. А если вспомнить, что это порт классики с SE1 на движок SE3 и то, что последний раз фиксы на игру (2010 года) выходили в апреле 2015, подозрения перерастают в уверенность.

     

    В прочем, по поводу пушки у меня есть одна идейка. Сейчас опробую.

    И заодно проверю фильтр брони и посмотрю,  может третий прикручу.

     

    Обновлено.

    Не работает. Идея основывалась на том, что в EBX при стрельбе из пушки пишется 1, но при внедрении модернизированного скрипта при стрельбе из серьёзной пушки игра всё равно падает. И что ты будешь делать....

  21. 19 минуту назад, Garik66 сказал:

    Мой вариант пробовал, без твоих изменений?

    Отсюда:

     

     

     

    Этот тоже. Игра нервно реагирует как-то на прямое изменение брони. Скорее всего, при прямом подборе начинает работать что-то ещё и как это отлавливать - не знаю.

    И вот забавная деталь - при попытке пострелять из серьёзной пушки игра крашится =) Причём краш происходит при любом изменении функции "mov [ecx], eax".

    Какую-то непростую зверюшку я себе для опытов выбрал...

  22. Скрытый текст

    21404f3ef363fe5b26d6.jpg

     

    Использовал для этого дела Notepad++ и плагин Compare. Меняются 3 значения - броня, указатель и флаг.

     

    И вот тут происходит любопытная вещь:

    Скрытый текст

    49da59d1123146c14e12.jpg

    Тут структура игрока загоняется в стек или что?

    Если открыть указатель по смещению 4, то он будет ссылаться на адрес *BD0, там же опять присутствует указатель по смещению  4, который ссылает на адрес *DD4 и так далее...

     

    Вот новая версия скрипта:

    Скрытый текст
    
    { Game   : SamHD_TSE.exe
      Version:
      Date   : 2016-03-16
      Author : Garik66 & SergBrNord
    
      This script does 99 HP & 98 ARM all time
    }
    
    [ENABLE]
    
    aobscanmodule(SAM_HP_ARM,SamHD_TSE.exe,8B 55 08 89 01 8B) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
      mov edx, [ebp+08]  
      cmp [ecx+A0], 2    
      jne @f             
      cmp esi, eax  
      jne @f        
      mov eax, #99
      cmp [ecx+14], 0  
      jne @f
      cmp [flag], 1  
      jne @f
      mov [ecx+14], #98
      mov [ecx+1C], 1  //Пишем тот флаг
      mov [flag], 0
      jmp code
    
    @@:
      cmp [ecx+40], #16
      jne code
      cmp [ecx+2C], 1
      jne code
      mov eax, #98
    
    code:
      mov [ecx],eax
      jmp return
    
    flag:
    dd 1
    
    SAM_HP_ARM:
      jmp newmem
    return:
    registersymbol(SAM_HP_ARM)
    
    [DISABLE]
    
    SAM_HP_ARM:
      db 8B 55 08 89 01
    
    unregistersymbol(SAM_HP_ARM)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "SamHD_TSE.exe"+4F483A
    
    "SamHD_TSE.exe"+4F4829: 5D                             -  pop ebp
    "SamHD_TSE.exe"+4F482A: C2 04 00                       -  ret 0004
    "SamHD_TSE.exe"+4F482D: CC                             -  int 3
    "SamHD_TSE.exe"+4F482E: CC                             -  int 3
    "SamHD_TSE.exe"+4F482F: CC                             -  int 3
    "SamHD_TSE.exe"+4F4830: 55                             -  push ebp
    "SamHD_TSE.exe"+4F4831: 8B EC                          -  mov ebp,esp
    "SamHD_TSE.exe"+4F4833: 8B 45 0C                       -  mov eax,[ebp+0C]
    "SamHD_TSE.exe"+4F4836: 39 01                          -  cmp [ecx],eax
    "SamHD_TSE.exe"+4F4838: 74 11                          -  je SamHD_TSE.exe+4F484B
    // ---------- INJECTING HERE ----------
    "SamHD_TSE.exe"+4F483A: 8B 55 08                       -  mov edx,[ebp+08]
    "SamHD_TSE.exe"+4F483D: 89 01                          -  mov [ecx],eax
    // ---------- DONE INJECTING  ----------
    "SamHD_TSE.exe"+4F483F: 8B 12                          -  mov edx,[edx]
    "SamHD_TSE.exe"+4F4841: 8B 12                          -  mov edx,[edx]
    "SamHD_TSE.exe"+4F4843: 33 C1                          -  xor eax,ecx
    "SamHD_TSE.exe"+4F4845: 89 51 08                       -  mov [ecx+08],edx
    "SamHD_TSE.exe"+4F4848: 89 41 04                       -  mov [ecx+04],eax
    "SamHD_TSE.exe"+4F484B: 5D                             -  pop ebp
    "SamHD_TSE.exe"+4F484C: C2 08 00                       -  ret 0008
    "SamHD_TSE.exe"+4F484F: CC                             -  int 3
    "SamHD_TSE.exe"+4F4850: 8B 01                          -  mov eax,[ecx]
    "SamHD_TSE.exe"+4F4852: 33 C1                          -  xor eax,ecx
    }
    
    { Game   : SamHD_TSE.exe
      Version:
      Date   : 2016-03-16
      Author : Garik66 & SergBrNord
    
      This script does 99 HP & 98 ARM all time
    }
    
    [ENABLE]
    
    aobscanmodule(SAM_HP_ARM,SamHD_TSE.exe,8B 55 08 89 01 8B) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
      mov edx, [ebp+08]  
      cmp [ecx+A0], 2    
      jne @f             
      cmp esi, eax  
      jne @f        
      mov eax, #99
      cmp [ecx+14], 0	//Проверяем на 0 брони  
      jne @f
      cmp [flag], 1  
      jne @f
      mov [ecx+14], #98
      mov [ecx+1C], 1  //Пишем тот флаг
      mov [flag], 0
      jmp code
    
    @@:
      cmp [ecx+40], #16
      jne code
      cmp [ecx+2C], 1
      jne code
      mov eax, #98
    
    code:
      mov [ecx],eax
      jmp return
    
    flag:
    dd 1
    
    SAM_HP_ARM:
      jmp newmem
    return:
    registersymbol(SAM_HP_ARM)
    
    [DISABLE]
    
    SAM_HP_ARM:
      db 8B 55 08 89 01
    
    unregistersymbol(SAM_HP_ARM)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "SamHD_TSE.exe"+4F483A
    
    "SamHD_TSE.exe"+4F4829: 5D                             -  pop ebp
    "SamHD_TSE.exe"+4F482A: C2 04 00                       -  ret 0004
    "SamHD_TSE.exe"+4F482D: CC                             -  int 3
    "SamHD_TSE.exe"+4F482E: CC                             -  int 3
    "SamHD_TSE.exe"+4F482F: CC                             -  int 3
    "SamHD_TSE.exe"+4F4830: 55                             -  push ebp
    "SamHD_TSE.exe"+4F4831: 8B EC                          -  mov ebp,esp
    "SamHD_TSE.exe"+4F4833: 8B 45 0C                       -  mov eax,[ebp+0C]
    "SamHD_TSE.exe"+4F4836: 39 01                          -  cmp [ecx],eax
    "SamHD_TSE.exe"+4F4838: 74 11                          -  je SamHD_TSE.exe+4F484B
    // ---------- INJECTING HERE ----------
    "SamHD_TSE.exe"+4F483A: 8B 55 08                       -  mov edx,[ebp+08]
    "SamHD_TSE.exe"+4F483D: 89 01                          -  mov [ecx],eax
    // ---------- DONE INJECTING  ----------
    "SamHD_TSE.exe"+4F483F: 8B 12                          -  mov edx,[edx]
    "SamHD_TSE.exe"+4F4841: 8B 12                          -  mov edx,[edx]
    "SamHD_TSE.exe"+4F4843: 33 C1                          -  xor eax,ecx
    "SamHD_TSE.exe"+4F4845: 89 51 08                       -  mov [ecx+08],edx
    "SamHD_TSE.exe"+4F4848: 89 41 04                       -  mov [ecx+04],eax
    "SamHD_TSE.exe"+4F484B: 5D                             -  pop ebp
    "SamHD_TSE.exe"+4F484C: C2 08 00                       -  ret 0008
    "SamHD_TSE.exe"+4F484F: CC                             -  int 3
    "SamHD_TSE.exe"+4F4850: 8B 01                          -  mov eax,[ecx]
    "SamHD_TSE.exe"+4F4852: 33 C1                          -  xor eax,ecx
    }

     

     

    P.S.

    Проверил твой и свой вариант скрипта - всё равно работает криво и с крашами. Как я и писал раньше - игра крайне нервно реагирует на прямое изменение содержимого.

  23. 26 минуты назад, LIRW сказал:

    Может и правду какая то защита там стоит. Кстати Игорь - я пробовал на лицензии делать и всё равно эта ошибка. Это не что краша игры. Тема должна была остаться тут , но в поиске она почему то не находится.

    На лицензии, CE младше 6.4 крашил игру при присоединении отладчика. Собственно, хоть я давно уроки посмотрел, но только на CE 6.4 смог начать её ломать - других шутеров у меня просто нет, только куча квестов. Так что у игры явно есть какой-то антидебаг-механизм .

     

    25 минуты назад, Garik66 сказал:

    PS: Ещё можно попробовать заставить игру дать нам броню (т.е. вписать сразу количество брони до её подбора), без поиска флага (ID).

    Не знаю к чему это приведёт, но попробуй скрипт:

    Протестировал этот вариант. Как я понял, у некоторых врагов тоже присутствует параметр брони и в этом варианте им тоже добавляется броня. Соответственно, из некоторого оружия их становится просто не убить - к примеру, у клиров из двустволки в упор снимается 50% здоровья, хотя должно ваншотить. Ну и, в конце-концов, игра минут через 8 подвисает.

     

    P.S.

    А есть ли в CE механизм, в который можно подгрузить старую и новую структуру и сравнить?  

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

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

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