Двери одержимого: главная клетка большой двери - multiBlockPos.GetParentPos, дальность - у блока, как у персонажа
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d490e75039
commit
67c8a622e8
@@ -2159,7 +2159,7 @@ namespace NecromancerTome
|
||||
/// (TEFeatureDoor - open/close), выключатели и лампы (light), рычаги квестов (activate). Без take, lock, edit,
|
||||
/// trigger. Запертую чужую дверь не откроет - замок проверяет сама дверь.</summary>
|
||||
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<TEFeatureDoor>() != null;
|
||||
if (!door && !(b is BlockSwitch) && !(b is BlockLight) && !(b is BlockActivateSwitch))
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user