private static CallbackResult OnObjectPicker(byte[] data, CallbackResult prevResult) { lastMenu = new Menu(data); return CallbackResult.Normal; }
private static IMacroCommand OnObjectPicked(byte[] data) { try { if (lastMenu != null) { uint dlgSerial = ByteConverter.BigEndian.ToUInt32(data, 1); if (dlgSerial == lastMenu.DialogSerial) { int choice = ByteConverter.BigEndian.ToUInt16(data, 7) - 1; if (choice < 0) { return new WaitMenuMacroCommand(new MenuSelection(lastMenu.Title, null)); } else if (choice < lastMenu.Options.Count) { return new WaitMenuMacroCommand(new MenuSelection(lastMenu.Title, lastMenu.Options[choice].Text)); } } } UO.Print(Env.ErrorColor, "Error recording macro: Unable to resolve MenuSelect."); return null; } finally { lastMenu = null; } }
private static CallbackResult OnObjectPicker(byte[] data, CallbackResult prevResult) { lock (syncRoot) { if (CurrentState == State.WaitMenu) { Debug.Assert(waitQueue != null && waitQueue.Count > 0, "Empty waitQueue."); Debug.Assert(waitQueue.Peek().IsMenu, "Target in top of the queue instead of menu."); Menu packet = new Menu(data); WaitQuery query = waitQueue.Dequeue(); MenuSelection menu = query.Menu; if (packet.Title.ToLowerInvariant().Contains(menu.Name.ToLowerInvariant())) { // Cancel menu if (menu.Option == null) { byte[] selectedData = PacketBuilder.ObjectPicked(packet.DialogSerial, packet.MenuSerial, 0, 0, 0); Core.SendToServer(selectedData); FinishWork(); query.Finish(RequestState.Completed); return CallbackResult.Eat; } // Select option string option = menu.Option.ToLowerInvariant(); for (int i = 0; i < packet.Options.Count; i++) { if (packet.Options[i].Text.ToLowerInvariant().Contains(option)) { byte[] selectedData = PacketBuilder.ObjectPicked(packet.DialogSerial, packet.MenuSerial, (ushort)(i + 1), packet.Options[i].Artwork, packet.Options[i].Hue); Core.SendToServer(selectedData); FinishWork(); query.Finish(RequestState.Completed); return CallbackResult.Eat; } } Trace.WriteLine("Unable to find requested option. Menu passed to client.", "UIManager"); } else { Trace.WriteLine("Unexpected menu received. Menu passed to client.", "UIManager"); } query.Finish(RequestState.Failed); FinishWork(); } if (CurrentState != State.Ready) { Reset(); } return CallbackResult.Normal; } }