Иконка ресурса

Login Screen Valakas for Classic base version

Нет прав для скачивания

AlhimN1

Поклонник кармы
AlhimN1, а если включить улучшенньіе шейдерьі, не уйдет нафиг текстура пола в гнезде? )
 

пол тут статик мешем, а шейдер обычный который даже на интерлюде идёт

настройки такие стоят


можно попробовать на другом классике
этот 196
а в какой версии пропадал?
 
Реакции: Rolo
Реакции: Rolo
deMEV, когда-то ближе к 2074 году гляну что там не так. ) Ну на ХФе єто довольно обширная проблема, вот такие прикольі тоже ловятся:
 
на 2-ки в школе учился смотрю
Черный на черном эльфе то что надо)
 
Реакции: Rolo
AlhimN1, я єту не тестил, то на дефолт логове такое. А єтот лобби все равно на хфе без валика будет, он павнов не отображает.
 
Реакции: Rolo
Норм на ХФ только без вала
 

Вложения

  • Безымянный.webp
    107,5 КБ · Просмотры: 15
На основе сравнения трех скриптов (C1LineagePawn.uc, 196LineagePawn.uc и hfLineagePawn.uc), а также типичных проблем с Pawn в Unreal Engine 2 (UE2) из результатов поиска по форумам и документации (например, проблемы с видимостью SkeletalMesh, анимациями, которые не обновляются, если mesh скрыт или не в поле зрения, конфликты с bounds для больших моделей вроде Valakas, и отключение анимаций для производительности), я выявил, чего именно не хватает в hfLineagePawn.uc. Это объясняет, почему в C1 и HF mesh не движется/не отображается (анимации "замерзают" или mesh invisible), а в 196 работает нормально (как в стандартном Pawn из UE2 "из коробки").


Ключевые различия скриптов, влияющие на проблему​


Все скрипты очень похожи (>90% кода идентичны), но вот критичные отличия, которые вызывают проблему в HF (и C1), но не в 196:


  1. Инициализация теней (ShadowProjector):
    • В HF и C1: Тени спавнятся напрямую в PostBeginPlay (если bActorShadows=True):
      text

      <span><span>if ( bActorShadows ) // 0x0000004A : 0x0061</span></span><br><span><span>{</span></span><br><span><span> Shadow1 = Spawn(Class'ShadowProjector',self,'None',Location); // 0x00000051 : 0x006A</span></span><br><span><span> Shadow1.ShadowActor = self;</span></span><br><span><span> Shadow1.LightDirection = Normal(vect(1.00,1.00,5.00));</span></span><br><span><span> Shadow1.LightDistance = 380.0 * 4;</span></span><br><span><span> Shadow1.MaxTraceDistance = 380 * 4;</span></span><br><span><span> Shadow1.InitShadow();</span></span><br><span><span> Shadow1.UpdateShadow();</span></span><br><span><span>}</span></span>


      Это может вызывать конфликт с рендерингом SkeletalMesh в UE2, особенно для больших моделей (как ваш Valakas с BoundRadius=511). ShadowProjector "прикрепляется" слишком рано, до полной инициализации mesh/анимаций, что приводит к тому, что mesh "замерзает" или становится невидимым (UE2 bug: проекторы теней иногда маскируют mesh, если спавн до SetDrawType или visibility check). Из поиска: Похожие проблемы в форумах UE, где ранний спавн проекторов/эффектов делает mesh invisible во время анимаций (см. и ).
    • В 196: Нет спавна теней в PostBeginPlay. Вместо этого отдельные функции AttachShadowProjector (для спавна) и DestroyShadowProjector (для очистки), которые вызываются по необходимости (например, в Destroyed вызывается DestroyShadowProjector). AttachShadowProjector не вызвана автоматически в PostBeginPlay, так что теней по умолчанию нет — и mesh работает без конфликта. Это делает 196 ближе к "стандартному" Pawn UE2, где лишние эффекты не спавнятся рано.
      Что не хватает в HF: Отдельных функций для отложенного спавна теней (как AttachShadowProjector в 196). Прямой спавн в PostBeginPlay — это ошибка, которая "ломает" рендеринг mesh/анимаций. Решение: Удалить спавн теней из PostBeginPlay или добавить вызов AttachShadowProjector позже (например, после PlayAnim).
  2. Опечатки в defaultproperties:
    • В HF и C1: Опечатки в именах свойств:
      text

      <span><span>CanBeIngnoredCollision=True // Опечатка: должно быть CanBeIgnoredCollision</span></span><br><span><span>CanIngnoreCollision=True // Опечатка: CanIgnoreCollision</span></span><br><span><span>KayboardRotationRate=(Pitch=0,Yaw=10000,Roll=0) // Опечатка: KeyboardRotationRate</span></span>


      Эти кастомные свойства (вероятно, для игнора коллизии и ротации от клавиатуры) не работают из-за опечаток — UE2 не распознает их, что может привести к ошибкам коллизии (pawn "застревает" и не обновляет анимации) или ротации (mesh не поворачивается, выглядит "замерзшим").
    • В 196: Правильные имена:
      text

      <span><span>CanBeIgnoredCollision=True</span></span><br><span><span>CanIgnoreCollision=True</span></span>


      Нет Kayboard — возможно, не нужно, но отсутствие опечаток делает скрипт стабильным.
      Что не хватает в HF: Правильных имен свойств. Опечатки вызывают silent errors, из-за чего pawn может игнорировать обновления (анимации не играют, mesh не движется). Из поиска: Похожие проблемы с коллизией приводят к невидимому mesh (см. и ).
  3. Инициализация анимаций и GetCurWaitAnimName:
    • В HF: В GetCurWaitAnimName добавлены проверки на CurWeaponType для swim-анимаций (например, SwimWaitAnimName[CurWeaponType]):
      text

      <span><span>if ( (Physics == 3) &amp;&amp; (SwimWaitAnimName[CurWeaponType] != 'None') )</span></span>


      Это может вызывать ошибку, если CurWeaponType не инициализирован (index out of bounds), что "замораживает" анимации.
    • В 196: Простая проверка без CurWeaponType (GetSwimWaitAnimName()).
      Что не хватает в HF: Защиты от ошибок в индексах массивов (CurWeaponType может быть undefined, вызывая crash анимаций). Из поиска: Анимации не играют, если mesh не visible или ошибки в AnimBP (аналогично в UE2, см. и ).
  4. Общие проблемы из поиска (применимо к HF/C1):
    • Анимации не обновляются, если bPhysicsAnimUpdate=False в T3D (конфликт со скриптом, где True) — mesh "замерзает" (см. , ).
    • Для больших mesh (Valakas): Включить "Use Parent Bounds" в свойствах mesh, иначе невидим за пределами view (см. ).
    • Mesh невидим, если actor hidden (bHidden=True) или не в game view (см. , ).
    • Pawn не possessed (нет Controller) — анимации не стартуют (см. для AI).

Что добавить/исправить в hfLineagePawn.uc, чтобы работал как в 196​


Вот модифицированный код для hfLineagePawn.uc (добавьте/измените разделы). Это сделает его похожим на 196: Отдельное управление тенями, исправленные опечатки, защита анимаций. Скомпилируйте (ucc make) и протестируйте с вашим T3D (измените Class=LineagePawn на ваш, если нужно).


unrealscript

//================================================================================// LineagePawn (исправленная версия hf для видимости/анимаций mesh).//================================================================================class LineagePawn extends Pawn NoNativeReplication Config(User);// ... (Остальной код без изменений, включая функции SetAnimAction, GetDebugName и т.д.)// Добавьте эти функции из 196 для теней (чтобы избежать конфликта в PostBeginPlay)simulated event AttachShadowProjector(){ if (Shadow1 == None) { Shadow1 = Spawn(Class'ShadowProjector',self,'None',Location); Shadow1.ShadowActor = self; Shadow1.LightDirection = Normal(vect(1.00,1.00,5.00)); Shadow1.LightDistance = 380.0 * 4; Shadow1.MaxTraceDistance = 380 * 4; Shadow1.InitShadow(); Shadow1.UpdateShadow(); }}simulated event DestroyShadowProjector(){ if (Shadow1 != None) { Shadow1.DetachProjector(True); Shadow1.NDestroy(); Shadow1 = None; }}simulated event Destroyed(){ DestroyShadowProjector(); // Вызов вместо прямого Destroy if (Mark != None) { Mark.DetachProjector(True); Mark.NDestroy(); } Super.Destroyed();}// В PostBeginPlay: Удалите спавн Shadow (чтобы избежать конфликта с mesh)function PostBeginPlay(){ Super.PostBeginPlay(); TurnLeftAnim = GetWalkAnimName(); TurnRightAnim = GetWalkAnimName(); MovementAnims[0] = GetCurMoveAnimName(); MovementAnims[1] = GetCurMoveAnimName(); MovementAnims[2] = GetCurMoveAnimName(); MovementAnims[3] = GetCurMoveAnimName(); PlayAnim(GetCurWaitAnimName()); // Добавьте явную инициализацию mesh/анимаций (для фикса видимости) SetDrawType(DT_Mesh); // Явно установить тип рендеринга bHidden = False; // Явно visible // Если нужны тени — вызовите отложено (не в PostBeginPlay) if (bActorShadows) { SetTimer(0.1, False); // Отложить спавн теней на 0.1 сек }}// Добавьте Timer для отложенного спавна теней (фикс конфликта)simulated event Timer(){ AttachShadowProjector(); Super.Timer(); // Если есть в родителе}// В GetCurWaitAnimName: Добавьте защиту от ошибок CurWeaponTypefunction name GetCurWaitAnimName(){ if (Controller != None) { // ... (остальной код) if (Controller.bAutoAttacking) { if ((Physics == 3) &amp;&amp; (CurWeaponType &lt; ArrayCount(SwimAttackWaitAnimName)) &amp;&amp; (SwimAttackWaitAnimName[CurWeaponType] != 'None')) return SwimAttackWaitAnimName[CurWeaponType]; // Защита от out-of-bounds else return GetAtkWaitAnimName(); } // Аналогично для SwimWaitAnimName } return GetWaitAnimName();}// Исправьте опечатки в defaultpropertiesdefaultproperties{ CanBeIgnoredCollision=True // Исправлено CanIgnoreCollision=True // Исправлено DamageEffect=Class'LineageEffect.p_u002_a' AirSpeed=120.00 bPhysicsAnimUpdate=True BaseMovementRate=120.00 bActorShadows=True bUnlitCheck=True RotationRate=(Pitch=0,Yaw=65000,Roll=0) KeyboardRotationRate=(Pitch=0,Yaw=10000,Roll=0) // Исправлено // ... (остальные свойства)}



Шаги по тестированию​


  1. Скомпилируйте: ucc make в System-папке.
  2. Обновите T3D: Добавьте bHidden=False, bPhysicsAnimUpdate=True (чтобы совпадало со скриптом), и поднимите Z в Location (как я предлагал раньше, чтобы не под землей).
  3. В UnrealEd: Импортируйте T3D, выберите Pawn -> Properties -> Rendering -> Visible=True, Use Parent Bounds=True (для большого mesh).
  4. Тест: Play Map. Если mesh visible, но не движется — вызовите анимацию через консоль (~): causeevent ChangeAnimation.
  5. Если тени нужны: Они спавнятся отложено через Timer — это фиксит конфликт.

чуйка мне подсказывает, что для того что б завелись на хф надо ребилднуть линейджвариор в которых сидит линейджпавн...
 
AlhimN1, я думаю єто где-то в районе енжина зашито, но утверждать не стану. )
 
AlhimN1, я думаю єто где-то в районе енжина зашито, но утверждать не стану. )
линейдж павн в линейджвариор, но ссылается на павн из енджие
значит надо и то и то менять, но это не точно))
вдруг вообще в длл сидит...
 
AlhimN1, я длл и имел ввиду. Ну банально, я не мог допереть почему на хфе в вивпорте ничего не спавнится в логин стейте, а потом глянул, там затьічка в дллке на функции спавна, типа если нет плеєр контролера - то иди нафиг, спавн отменяется. Наверное, єто связано с тем, что на тех хрониках вивпорт применялся для свого же персонажа, и логично, если его нет, ничего не показьівать, но решение все равно "интересное", как по мне. ) Вот думаю тут такая же история может бьіть. Проверять я єто, конечно же, не буду. )
 
добавил я значит скрипт кастом линейдж павна
(class CustomLineagePawn extends Pawn NoNativeReplication Config(User);
и так далее),
.......
он работает так же как обычный - на 196 работает нормально, на С1 стоит колом, на ХФ нету ничего...

ещё конечно вариант поколдовать с павн, если нет то значит в длл
 
AlhimN1, так л2павн наследует же просто павн с енжина, там можно что угодно оверрайтнуть. Или как вообще спавнятся на карте єти нпсьі в редакторе, они на павн сразу ссьілаются, или через свои классьі и по цепочке л2павн проходят?
 
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…