PHActivationShape.cpp

Материал из MODFAQ.RU — моддинг S.T.A.L.K.E.R., TES и Fallout
Перейти к: навигация, поиск
Expression : assertion failed
Function : CPHActivationShape::Create
File : D:\prog_repository\sources\trunk\xrPhysics\PHActivationShape.cpp
Line : 177
Description : _valid( start_pos )

Ошибка[1][2]

У какой-то модели не настроены шейпы костей модели. Какой конкретно, искать придется методом тыка.

Может происходить при смерти:

  • игрока
  • NPC
  • монстра

Также при жизни все вышеперечисленные могут быть невосприимчивы к урону[3], а у NPC исчезнет возможность диалога[4].

Решение[5]

Вариант 1
  1. С помощью X-Ray Converter конвертируйте *.ogf-файл аналогичной исправной модели в формат *.object
  2. Загрузите полученный *.object-файл в Actor Editor
  3. В окне Object Items, откройте вкладку Bones
  4. В окне Item Properties выберите:
    • Bones\Global:
      • File -> Save.
    Чтобы сохранить файл с исправными параметрами костей.
  5. Конвертируйте *.ogf-файл проблемной модели в формат *.object
  6. В окне Object Items, откройте вкладку Bones
  7. В окне Item Properties выберите:
    • Bones\Global:
      • File -> Load.
    Чтобы загрузить файл с исправными параметрами костей.
  8. Экспортируйте модель обратно в игровой формат *.ogf, командой: File -> Export -> Export OGF...
Вариант 2
  1. С помощью X-Ray Converter конвертируйте *.ogf-файл проблемной модели в формат *.object
  2. Загрузите полученный *.object-файл в Actor Editor
  3. В окне Object Items, откройте вкладку Bones
  4. Далее, по очереди задайте каждой кости соответствующие параметры в окне Item Properties:
    • Shape\Flags:
      • No Pickable
      • No Physics
      • Remove After Break
      • No Fog Collider
    • Shape\Type
  5. По окончанию установки параметров выполните:
    • Bones\Global:
      • Generate Shape -> All.
  6. Экспортируйте модель обратно в игровой формат *.ogf, командой: File -> Export -> Export OGF...
Если вылет происходит при переходе на другой уровень[6][7]

Попробуйте удалить трупы NPC и монстров с проблемного уровня.

Для этого необходимо в файле gamedata/scripts/ui_main_menu.script вписать после:

if dik == DIK_keys.DIK_Q then
   self:OnMessageQuitWin()

Следующий код:

elseif dik == DIK_keys.DIK_F5 then
   local id, obj, level_name, kto
   for id = 1, 65535 do
    obj = alife(): object(id)
    if obj then
     level_name = alife(): level_name(game_graph(): vertex(obj.game_vertex_id): level_id())
     if level_name == "ИМЯ_УРОВНЯ" then
      if IsStalker(obj) or IsMonster(obj) then
       if not obj: alive() then
        kto = obj:section_name()
        alife():release(alife(): object(id), true)
        get_console(): execute(kto.."-удален")
       end
      end
     end    
    end
   end
  end

Затем изменить ИМЯ_УРОВНЯ на имя уровня из файла gamedata/configs/game_maps_single.ltx, при переходе на который происходит вылет.

Загрузите сохранение, откройте главное меню и нажмите клавишу F5 - вышеуказанный скрипт выполниться.

Кроме того в логе появятся все имена удаленных объектов. Если вылет не повторился, значит проблемная модель была удалена и можно начинать фильтровать по списку из лога.

Источник