diff --git a/HarmonySrc/Possession.cs b/HarmonySrc/Possession.cs index 4595220..865f14b 100644 --- a/HarmonySrc/Possession.cs +++ b/HarmonySrc/Possession.cs @@ -106,8 +106,12 @@ namespace NecromancerTome /// угол из PlaceCamera затирался). public static float ZoomFov = -1f; /// Зазор между когтями стервятника и спиной ноши, м; минус - когти впиваются в спину - /// (тест 08.10: «курица висит под стервятником, а не в его когтях»). - public const float CarryGap = -0.06f; + /// (тест 08.10: «курица висит под стервятником, а не в его когтях»). 22.10: -0.06 -> -0.15 («поднимай курицу и кролика + /// ещё выше. Иначе они не достают до лап»). Подбор без перезапуска - necrocarry gap. + public static float CarryGap = -0.15f; + /// С ношей Shift не разгоняет (22.10: «он не может разгоняться по шифту, ибо перегружен»). Выключатель - + /// necrocarry run on|off. + public static bool CarryNoRun = true; /// Цель рывка под прицелом сейчас (каждый кадр) - обычный прицел игры краснеет (AimTint). public static EntityAlive FlyAim; static float _flyDashUntil; @@ -961,7 +965,8 @@ namespace NecromancerTome dir += Vector3.down; } bool moving = dir.sqrMagnitude > 0.01f; - float accel = _flyRun ? FlyAccelRun * _v.moveSpeedAggro : FlyAccel * _v.moveSpeed; + bool run = _flyRun && !(CarryNoRun && _carry != null); // с ношей - перегружен, без разгона + float accel = run ? FlyAccelRun * _v.moveSpeedAggro : FlyAccel * _v.moveSpeed; if (moving) { _v.motion = _v.motion * 0.9f + dir.normalized * (accel * 0.1f); @@ -976,7 +981,7 @@ namespace NecromancerTome _v.SetRotation(new Vector3(0f, _bodyYaw, 0f)); if (_v.emodel != null && _v.emodel.avatarController != null) { - _v.glidingCurrentPercent = Mathf.MoveTowards(_v.glidingCurrentPercent, _flyRun && moving ? 1f : 0f, 0.06f); + _v.glidingCurrentPercent = Mathf.MoveTowards(_v.glidingCurrentPercent, run && moving ? 1f : 0f, 0.06f); _v.emodel.avatarController.UpdateFloat("Gliding", _v.glidingCurrentPercent); } // «Вниз» на земле посадке не мешает: Ctrl - переключатель, и с ним стервятник не сел бы никогда. diff --git a/HarmonySrc/VultureCarryCommand.cs b/HarmonySrc/VultureCarryCommand.cs new file mode 100644 index 0000000..6bf4e3a --- /dev/null +++ b/HarmonySrc/VultureCarryCommand.cs @@ -0,0 +1,41 @@ +using System.Collections.Generic; +using System.Globalization; +using UnityEngine; + +namespace NecromancerTome +{ + /// Ноша одержимого стервятника (курица, кролик): высота под лапами и запрет разгона с грузом (22.10.2026). + public class ConsoleCmdNecroCarry : ConsoleCmdAbstract + { + public override string[] getCommands() => new[] { "necrocarry" }; + public override string getDescription() => "NecromancerTome: ноша стервятника - gap <м, минус - выше>|run on|off|show"; + + void Out(string _s) + { + SdtdConsole.Instance.Output(_s); + Debug.Log("[NecromancerTome] necrocarry: " + _s); + } + + public override void Execute(List _params, CommandSenderInfo _senderInfo) + { + string cmd = _params.Count > 0 ? _params[0] : "show"; + switch (cmd) + { + case "gap": + if (_params.Count > 1 && float.TryParse(_params[1].Replace(',', '.'), NumberStyles.Float, CultureInfo.InvariantCulture, out float g)) + { + Possession.CarryGap = Mathf.Clamp(g, -0.6f, 0.3f); + } + break; + case "run": + if (_params.Count > 1 && (_params[1] == "on" || _params[1] == "off")) + { + Possession.CarryNoRun = _params[1] == "on"; + } + break; + } + Out("gap " + Possession.CarryGap.ToString("0.###", CultureInfo.InvariantCulture) + ", без разгона с ношей - " + + (Possession.CarryNoRun ? "да" : "нет")); + } + } +}