public bool IsPc(int x, int y) { if (!IsInCurrentArea(x, y)) { return(false); } return(Objects.Any(ob => ob.x == x && ob.z == -y && ob.Name.StartsWith("PCComputer")) && OriginalNpcs.Any(n => n.PositionX == x && n.PositionY == y && n.NpcName.ToLowerInvariant().StartsWith("new"))); }
public MoveResult CanMove(Direction direction, int destinationX, int destinationY, bool isOnGround, bool isSurfing, bool canUseCut, bool canUseSmashRock) { var newArea = CheckArea(destinationX, destinationY); if ((destinationX < 0 || destinationX > DimensionX || destinationY < 0 || destinationY > DimensionY) && !HasLink(destinationX, destinationY) && newArea?.AreaName.ToLowerInvariant() == CurrentArea?.AreaName.ToLowerInvariant()) { return(MoveResult.Fail); } if (OriginalNpcs.Any(npc => npc.PositionX == destinationX && npc.PositionY == destinationY && !npc.IsMoving && npc.CanBlockPlayer && npc.IsVisible)) { return(MoveResult.Fail); } if (direction != Direction.Down && GetCollider(destinationX, destinationY) == 4) { return(MoveResult.Fail); } if (IsUnmoveableCellSide(direction, destinationX, destinationY)) { return(MoveResult.Fail); } int collider = GetCollider(destinationX, destinationY); if (!IsMovementValid(direction, collider, isOnGround, isSurfing, canUseCut, canUseSmashRock, destinationX, destinationY)) { return(MoveResult.Fail); } if (collider == 4 || collider == 6) { return(MoveResult.Jump); } if (isSurfing && !IsWater(destinationX, destinationY)) { return(MoveResult.NoLongerSurfing); } return(MoveResult.Success); }