diff --git a/HarmonySrc/Possession.cs b/HarmonySrc/Possession.cs index 3741dba..c87cee3 100644 --- a/HarmonySrc/Possession.cs +++ b/HarmonySrc/Possession.cs @@ -2159,7 +2159,7 @@ namespace NecromancerTome /// (TEFeatureDoor - open/close), выключатели и лампы (light), рычаги квестов (activate). Без take, lock, edit, /// trigger. Запертую чужую дверь не откроет - замок проверяет сама дверь. static readonly string[] UseCommands = { "open", "close", "light", "activate" }; - public const float UseReach = 3f; + public const float UseReach = 6f; // дальше луч не ищет; сама дальность - у блока (GetActivationDistanceSq) static bool UseDoorOrSwitch(World _world, EntityAlive _z) { @@ -2181,16 +2181,25 @@ namespace NecromancerTome } Vector3i pos = Voxel.voxelRayHitInfo.hit.blockPos; BlockValue bv = _world.GetBlock(pos); - if (bv.ischild) - { - pos += bv.parent; - bv = _world.GetBlock(pos); - } Block b = bv.Block; + // Створка большой двери - клетка-«ребёнок»; функция двери - у главной клетки. Как у персонажа + // (PlayerMoveController): multiBlockPos.GetParentPos (тест 13.10: двустворчатая дверь не открывалась). + if (bv.ischild && b?.multiBlockPos != null) + { + pos = b.multiBlockPos.GetParentPos(pos, bv); + bv = _world.GetBlock(pos); + b = bv.Block; + } if (bv.isair || b == null) { return false; } + // Дальность - самого блока, как у персонажа (GetActivationDistanceSq), от головы зомби. + if ((Voxel.voxelRayHitInfo.hit.pos - _z.getHeadPosition()).sqrMagnitude >= b.GetActivationDistanceSq()) + { + Debug.Log("[NecromancerTome] Possession: E по " + b.GetBlockName() + " - далеко"); + return false; + } // Только двери (функция двери у составного блока) и выключатели, лампы, рычаги - E по ящику остаётся лутом. bool door = _world.GetTileEntity(pos) is TileEntityComposite tec && tec.GetFeature() != null; if (!door && !(b is BlockSwitch) && !(b is BlockLight) && !(b is BlockActivateSwitch)) diff --git a/NecromancerHarmony.dll b/NecromancerHarmony.dll index ad5b32d..92bcca3 100644 Binary files a/NecromancerHarmony.dll and b/NecromancerHarmony.dll differ diff --git a/NecromancerHarmony.pdb b/NecromancerHarmony.pdb index 0191254..66316f8 100644 Binary files a/NecromancerHarmony.pdb and b/NecromancerHarmony.pdb differ