Убран замер фризов FreezeProbe; закоммичены звук, пирамида и necroboneshiv
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
0c1235b079
commit
0d55f895de
@@ -0,0 +1,47 @@
|
|||||||
|
<config>
|
||||||
|
|
||||||
|
<!-- ПЕРВЫЙ СОБСТВЕННЫЙ ЗВУК МОДА (2026-09-10). До этого весь мод переиспользовал ванильные
|
||||||
|
звуковые id: разбор 2026-08-30 показал, что новый звук нельзя просто положить файлом
|
||||||
|
рядом с XML. Аудио в этой версии игры - единственный тип ассета, который идёт через
|
||||||
|
DataLoader.LoadAsset<AudioClip> -> Resources.Load, а тот читает только запечённое в
|
||||||
|
сборку самой игры; ванильные "@:Sounds/..." идут вообще третьим путём, через
|
||||||
|
Addressables, чей каталог модам недоступен. Единственная работающая дорога для НОВОГО
|
||||||
|
аудио - синтаксис "#bundlePath?assetName", то есть настоящий Unity AssetBundle.
|
||||||
|
|
||||||
|
Бандл собирается из Unity-проекта в _private/Extracted/ItemsUnityProject скриптом
|
||||||
|
Assets/Editor/NecroSoundSetup.cs (копия - _private/tools/UnityEditorScripts/) и кладётся
|
||||||
|
в Resources/necrosounds. Исходники звуков и настройки импорта - там же, здесь только
|
||||||
|
ссылка. Пересобрать: Unity.exe -batchmode -nographics -quit -projectPath <проект>
|
||||||
|
-executeMethod NecroSoundSetup.SetupAndBuild -logFile <лог>.
|
||||||
|
|
||||||
|
ЕСЛИ ЗВУКА НЕТ В ИГРЕ: отказ здесь ТИХИЙ - ни краша, ни ошибки загрузки XML, только
|
||||||
|
строка "AudioManager LoadAudio failed to load audio clip" в логе игры. Проверять надо
|
||||||
|
именно лог, а не "ну наверное не слышно за другими звуками".
|
||||||
|
-->
|
||||||
|
<append xpath="/Sounds">
|
||||||
|
|
||||||
|
<!-- Камень духов: попадание по зомби (то есть попадание, которое реально накладывает
|
||||||
|
charm). Вешается на triggered_effect в items.xml, там же и отсечка "только зомби".
|
||||||
|
|
||||||
|
AudioSource_Impact.prefab - ровно тот же ванильный источник, что у сиблинга
|
||||||
|
stonehitorganic, который звучит на этом же событии: одинаковые кривые затухания и
|
||||||
|
та же группа микшера, поэтому два звука удара не разъезжаются по громкости.
|
||||||
|
|
||||||
|
Имя клипа С РАСШИРЕНИЕМ (soulstone.mp3) - не опечатка. Игра ищет ассет в бандле по
|
||||||
|
имени файла, а не по пути внутри Unity-проекта; ровно эта форма уже подтверждена в
|
||||||
|
игре на ноже ("...necroknife?necroKnifePrefab.prefab").
|
||||||
|
|
||||||
|
Узла <Noise> здесь сознательно НЕТ. Шум для стелса на этом попадании уже создаёт
|
||||||
|
stonehitorganic (Noise ID=1, noise=7), и второй узел просто удвоил бы привлечение
|
||||||
|
зомби на ровном месте - звук чармa не должен быть громче в смысле AI, чем сам удар
|
||||||
|
камня. -->
|
||||||
|
<SoundDataNode name="necroSpiritStoneHit">
|
||||||
|
<AudioSource name="@:Sounds/Prefabs/AudioSource_Impact.prefab"/>
|
||||||
|
<AudioClip ClipName="#@modfolder(NecromancerTome):Resources/necrosounds?soulstone.mp3"/>
|
||||||
|
<MaxVoices value="3"/>
|
||||||
|
<MaxRepeatRate value="0.1"/>
|
||||||
|
</SoundDataNode>
|
||||||
|
|
||||||
|
</append>
|
||||||
|
|
||||||
|
</config>
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
using UnityEngine;
|
|
||||||
|
|
||||||
namespace NecromancerTome
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Замер фризов (жалоба 10.10: «в чертогах лагает... это были фризы»). Средний FPS из строк игры «Time: ... FPS»
|
|
||||||
/// их не показывает - он за минуту. Здесь каждый кадр дольше Threshold пишется в лог: длительность, сколько
|
|
||||||
/// сборок мусора прошло за этот кадр (GC поколения 0 - если растёт, фриз от сборки мусора: мод или игра много
|
|
||||||
/// выделяют), режим мода (чертоги/змея/одержимость) и сколько областей мира загружено.
|
|
||||||
/// Строки: «[NecromancerTome] FreezeProbe: ...». Ничего не хранит, кроме пары чисел.
|
|
||||||
/// </summary>
|
|
||||||
public static class FreezeProbe
|
|
||||||
{
|
|
||||||
public const float Threshold = 0.1f;
|
|
||||||
static int _gc = -1;
|
|
||||||
static float _skipUntil;
|
|
||||||
|
|
||||||
public static void Init()
|
|
||||||
{
|
|
||||||
ModEvents.UnityUpdate.RegisterHandler(OnUnityUpdate);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void OnUnityUpdate(ref ModEvents.SUnityUpdateData _data)
|
|
||||||
{
|
|
||||||
int gc = System.GC.CollectionCount(0);
|
|
||||||
World world = GameManager.Instance?.World;
|
|
||||||
if (world == null || world.GetPrimaryPlayer() == null)
|
|
||||||
{
|
|
||||||
_gc = gc;
|
|
||||||
_skipUntil = Time.unscaledTime + 20f; // загрузка мира - фризы ожидаемы
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
float dt = Time.unscaledDeltaTime;
|
|
||||||
int dgc = _gc < 0 ? 0 : gc - _gc;
|
|
||||||
_gc = gc;
|
|
||||||
if (dt < Threshold || Time.unscaledTime < _skipUntil || GameManager.Instance.IsPaused())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
string mode = MindPalace.Active ? "чертоги" : SnakeMode.Active ? "змея" : Possession.Active ? "одержимость" : "тело";
|
|
||||||
int obs = GameManager.Instance.World?.m_ChunkManager?.m_ObservedEntities?.Count ?? -1;
|
|
||||||
Debug.Log("[NecromancerTome] FreezeProbe: кадр " + Mathf.RoundToInt(dt * 1000f) + " мс, сборок мусора +" + dgc +
|
|
||||||
", режим " + mode + ", наблюдателей областей " + obs + ", куча " + (System.GC.GetTotalMemory(false) >> 20) + " МБ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -66,7 +66,6 @@ namespace NecromancerTome
|
|||||||
NecroMailbox.Init();
|
NecroMailbox.Init();
|
||||||
Possession.Init();
|
Possession.Init();
|
||||||
BloodTide.Init();
|
BloodTide.Init();
|
||||||
FreezeProbe.Init();
|
|
||||||
RemainsDecay.Init();
|
RemainsDecay.Init();
|
||||||
// PyramidWardPatch.cs's TEFeaturePyramidWard needs no Init() call - it's discovered
|
// PyramidWardPatch.cs's TEFeaturePyramidWard needs no Init() call - it's discovered
|
||||||
// automatically by the engine's own TileEntityCompositeData reflection scan (see that
|
// automatically by the engine's own TileEntityCompositeData reflection scan (see that
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user