public void AttachTo(IGameObject obj, Vector3 offset = default(Vector3)) { AssertNotDisposed(); if (obj == null) { throw new ArgumentNullException(nameof(obj)); } if (!(obj is IIdentifiable)) { throw new ArgumentException("obj must be IIdentifiable"); } var playerid = BasePlayer.InvalidId; var objectid = ((IIdentifiable)obj).Id; var type = StreamerObjectType.Global; if (obj is IOwnable <BasePlayer> ) { playerid = (obj as IOwnable <BasePlayer>).Owner.Id; } if (obj is PlayerObject) { type = StreamerObjectType.Player; } if (obj is DynamicObject) { type = StreamerObjectType.Dynamic; } Internal.AttachDynamicAreaToObject(Id, objectid, (int)type, playerid, offset.X, offset.Y, offset.Z); }