public override void Unload() { ItemHold.Clear(); try { Plugin.OnDisconnected(); } catch { } TargetManager.Reset(); // special case for wmap. this allow us to save settings UIManager.GetGump <WorldMapGump>() ?.SaveSettings(); ProfileManager.Current?.Save ( UIManager.Gumps.OfType <Gump>() .Where(s => s.CanBeSaved) .Reverse() .ToList() ); Macros.Save(); InfoBars.Save(); ProfileManager.UnLoadProfile(); StaticFilters.CleanCaveTextures(); StaticFilters.CleanTreeTextures(); NetClient.Socket.Disconnected -= SocketOnDisconnected; NetClient.Socket.Disconnect(); _lightRenderTarget?.Dispose(); _world_render_target?.Dispose(); CommandManager.UnRegisterAll(); Weather.Reset(); UIManager.Clear(); World.Clear(); UOChatManager.Clear(); DelayedObjectClickManager.Clear(); _useItemQueue?.Clear(); _useItemQueue = null; Hotkeys = null; Macros = null; MessageManager.MessageReceived -= ChatOnMessageReceived; Settings.GlobalSettings.WindowSize = new Point(Client.Game.Window.ClientBounds.Width, Client.Game.Window.ClientBounds.Height); Settings.GlobalSettings.IsWindowMaximized = Client.Game.IsWindowMaximized(); Client.Game.SetWindowBorderless(false); base.Unload(); }
protected override void OnMouseUp(int x, int y, MouseButtonType button) { base.OnMouseUp(x, y, button); if (button == MouseButtonType.Left) { GameScene gs = Client.Game.GetScene <GameScene>(); if (gs == null) { return; } if (Item == null || Item.IsDestroyed) { Dispose(); } if (IsDisposed) { return; } if (TargetManager.IsTargeting) { _clickedCanDrag = false; if (Mouse.IsDragging && CanPickup()) { if (!ItemHold.Enabled || !gs.IsMouseOverUI) { return; } SelectedObject.Object = Item; if (Item.ItemData.IsContainer) { gs.DropHeldItemToContainer(Item); } else if (ItemHold.Graphic == Item.Graphic && ItemHold.IsStackable) { gs.MergeHeldItem(Item); } else { if (SerialHelper.IsItem(Item.Container)) { gs.DropHeldItemToContainer(World.Items.Get(Item.Container), X + (Mouse.Position.X - ScreenCoordinateX), Y + (Mouse.Position.Y - ScreenCoordinateY)); } } return; } switch (TargetManager.TargetingState) { case CursorTarget.Position: case CursorTarget.Object: case CursorTarget.Grab: case CursorTarget.SetGrabBag: SelectedObject.Object = Item; if (Item != null) { TargetManager.Target(Item); Mouse.LastLeftButtonClickTime = 0; } break; case CursorTarget.SetTargetClientSide: SelectedObject.Object = Item; if (Item != null) { TargetManager.Target(Item); Mouse.LastLeftButtonClickTime = 0; UIManager.Add(new InspectorGump(Item)); } break; case CursorTarget.HueCommandTarget: SelectedObject.Object = Item; if (Item != null) { CommandManager.OnHueTarget(Item); } break; } } else { if (!ItemHold.Enabled || !gs.IsMouseOverUI) { //if (_clickedCanDrag) //{ // _clickedCanDrag = false; // _sendClickIfNotDClick = true; // _sClickTime = Time.Ticks + Mouse.MOUSE_DELAY_DOUBLE_CLICK; //} if (!DelayedObjectClickManager.IsEnabled) { DelayedObjectClickManager.Set(Item.Serial, Mouse.Position.X, Mouse.Position.Y, Time.Ticks + Mouse.MOUSE_DELAY_DOUBLE_CLICK); } } else { SelectedObject.Object = Item; if (Item.ItemData.IsContainer) { gs.DropHeldItemToContainer(Item); } else if (ItemHold.Graphic == Item.Graphic && ItemHold.IsStackable) { gs.MergeHeldItem(Item); } else { if (SerialHelper.IsItem(Item.Container)) { gs.DropHeldItemToContainer(World.Items.Get(Item.Container), X + (Mouse.Position.X - ScreenCoordinateX), Y + (Mouse.Position.Y - ScreenCoordinateY)); } } } } _clickedCanDrag = false; } }
protected override void OnMouseUp(int x, int y, MouseButtonType button) { if (button == MouseButtonType.Left) { if (UIManager.MouseOverControl?.RootParent == RootParent) { GameScene gs = Client.Game.GetScene <GameScene>(); if (gs != null) { Item item = World.Items.Get(LocalSerial); if (item != null) { if (TargetManager.IsTargeting) { if (Mouse.IsDragging && CanPickup()) { if (ItemHold.Enabled && gs.IsMouseOverUI) { if (item.ItemData.IsContainer) { gs.DropHeldItemToContainer(item); } else if (ItemHold.Graphic == item.Graphic && ItemHold.IsStackable) { gs.MergeHeldItem(item); } else { if (SerialHelper.IsItem(item.Container)) { gs.DropHeldItemToContainer(World.Items.Get(item.Container), X + (Mouse.Position.X - ScreenCoordinateX), Y + (Mouse.Position.Y - ScreenCoordinateY)); } } Mouse.CancelDoubleClick = true; return; } } switch (TargetManager.TargetingState) { case CursorTarget.Position: case CursorTarget.Object: case CursorTarget.Grab: case CursorTarget.SetGrabBag: if (item != null) { var p = RootParent; if (p != null) { DelayedObjectClickManager.X = Mouse.Position.X - p.ScreenCoordinateX; DelayedObjectClickManager.Y = Mouse.Position.Y - p.ScreenCoordinateY; } TargetManager.Target(item); Mouse.LastLeftButtonClickTime = 0; } break; case CursorTarget.SetTargetClientSide: if (item != null) { TargetManager.Target(item); Mouse.LastLeftButtonClickTime = 0; UIManager.Add(new InspectorGump(item)); } break; case CursorTarget.HueCommandTarget: if (item != null) { CommandManager.OnHueTarget(item); } break; } return; } else { Point offset = Mouse.LDroppedOffset; if ((Math.Abs(offset.X) < Constants.MIN_PICKUP_DRAG_DISTANCE_PIXELS && Math.Abs(offset.Y) < Constants.MIN_PICKUP_DRAG_DISTANCE_PIXELS) && (!ItemHold.Enabled || !gs.IsMouseOverUI)) { if (!DelayedObjectClickManager.IsEnabled) { var p = RootParent; if (p != null) { var off = Mouse.LDroppedOffset; DelayedObjectClickManager.Set(LocalSerial, (Mouse.Position.X - off.X) - p.ScreenCoordinateX, (Mouse.Position.Y - off.Y) - p.ScreenCoordinateY, Time.Ticks + Mouse.MOUSE_DELAY_DOUBLE_CLICK); } return; } } else if (item != null) { if (item.ItemData.IsContainer) { gs.DropHeldItemToContainer(item); } else if (ItemHold.Graphic == item.Graphic && ItemHold.IsStackable) { gs.MergeHeldItem(item); } else if (SerialHelper.IsItem(item.Container)) { gs.DropHeldItemToContainer(World.Items.Get(item.Container), X + (Mouse.Position.X - ScreenCoordinateX), Y + (Mouse.Position.Y - ScreenCoordinateY)); } else { base.OnMouseUp(x, y, button); } Mouse.CancelDoubleClick = true; return; } } } } } } else { base.OnMouseUp(x, y, button); } }
protected override void OnMouseUp(int x, int y, MouseButtonType button) { Mobile container = World.Mobiles.Get(_parentSerial); if (MouseIsOver) { if (ItemHold.Enabled || LocalSerial == 0) { if (container != null) { GameScene scene = Client.Game.GetScene <GameScene>(); if (scene == null) { return; } if (_layer == Layer.Backpack) { Item equipment = container.FindItemByLayer(_layer); if (equipment != null) { if (_layer == Layer.Backpack) { scene.DropHeldItemToContainer(LocalSerial != World.Player.Serial ? container.Serial : equipment.Serial); } Mouse.CancelDoubleClick = true; Mouse.LastLeftButtonClickTime = 0; return; } } else if (ItemHold.ItemData.IsWearable) { Item equipment = container.FindItemByLayer(ItemHold.Layer); if (equipment == null) { scene.WearHeldItem(_parentSerial != World.Player ? container : World.Player); Mouse.CancelDoubleClick = true; Mouse.LastLeftButtonClickTime = 0; return; } } else { Item cont = container.FindItemByLayer(_layer); if (cont != null && cont.ItemData.IsContainer) { scene.DropHeldItemToContainer(cont); Mouse.CancelDoubleClick = true; Mouse.LastLeftButtonClickTime = 0; return; } } } else { Client.Game.Scene.Audio.PlaySound(0x0051); } } } if (!ItemHold.Enabled && container != null) { Item equipment = container.FindItemByLayer(_layer); if (equipment != null) { if (TargetManager.IsTargeting) { TargetManager.Target(equipment.Serial); Mouse.CancelDoubleClick = true; Mouse.LastLeftButtonClickTime = 0; } else { if (!DelayedObjectClickManager.IsEnabled) { DelayedObjectClickManager.Set(LocalSerial, Mouse.Position.X - ScreenCoordinateX, Mouse.Position.Y - ScreenCoordinateY, Time.Ticks + Mouse.MOUSE_DELAY_DOUBLE_CLICK); } } } } }
protected override void OnMouseUp(int x, int y, MouseButtonType button) { if (!World.InGame || button != MouseButtonType.Left) { base.OnMouseUp(x, y, button); return; } Mobile container = World.Mobiles.Get(_parentSerial); if (MouseIsOver) { if (ItemHold.Enabled /*|| LocalSerial == 0*/) { if (container != null) { GameScene scene = Client.Game.GetScene <GameScene>(); if (scene == null) { return; } if (_layer == Layer.Backpack) { Item equipment = container.FindItemByLayer(_layer); if (equipment != null) { if (_layer == Layer.Backpack) { scene.DropHeldItemToContainer(LocalSerial != World.Player.Serial ? container.Serial : equipment.Serial); } Mouse.CancelDoubleClick = true; Mouse.LDropPosition = Mouse.Position; return; } } else if (ItemHold.ItemData.IsWearable) { Item equipment = container.FindItemByLayer(ItemHold.Layer); if (equipment == null) { scene.WearHeldItem(_parentSerial != World.Player ? container : World.Player); Mouse.CancelDoubleClick = true; Mouse.LDropPosition = Mouse.Position; return; } } else { Item cont = container.FindItemByLayer(_layer); if (cont != null && cont.ItemData.IsContainer) { scene.DropHeldItemToContainer(cont); Mouse.CancelDoubleClick = true; Mouse.LDropPosition = Mouse.Position; return; } } } else { Client.Game.Scene.Audio.PlaySound(0x0051); } } } if (!ItemHold.Enabled && container != null && UIManager.LastControlMouseDown(MouseButtonType.Left) == this) { Item equipment = container.FindItemByLayer(_layer); if (equipment != null) { if (TargetManager.IsTargeting) { TargetManager.Target(equipment.Serial); Mouse.CancelDoubleClick = true; Mouse.LastLeftButtonClickTime = 0; if (TargetManager.TargetingState == CursorTarget.SetTargetClientSide) { UIManager.Add(new InspectorGump(equipment)); } } else { if (!DelayedObjectClickManager.IsEnabled) { var off = Mouse.LDroppedOffset; DelayedObjectClickManager.Set(LocalSerial, (Mouse.Position.X - off.X) - ScreenCoordinateX, (Mouse.Position.Y - off.Y) - ScreenCoordinateY, Time.Ticks + Mouse.MOUSE_DELAY_DOUBLE_CLICK); } } } } }