public static string DirectionTo(object obj) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { return(Direction.Invalid.ToString()); } Entity entity = UOMath.IsMobile(serial) ? Engine.Mobiles.GetMobile(serial) : Engine.Items.GetItem(serial) as Entity; if (entity == null) { return(Direction.Invalid.ToString()); } return(UOMath.MapDirection(Engine.Player.X, Engine.Player.Y, entity.X, entity.Y).ToString()); }
private static bool CheckNotoriety(object obj, Notoriety notoriety) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id, true); return(false); } Mobile m = Engine.Mobiles.GetMobile(serial); if (m == null) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id, true); return(false); } return(m.Notoriety == notoriety); }
public static int Contents(object obj) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return(0); } Item container = Engine.Items.GetItem(serial); if (container?.Container != null) { return(container.Container.GetTotalItemCount()); } UOC.SystemMessage(Strings.Invalid_container___); return(0); }
public static bool Hidden(object obj = null) { int serial = AliasCommands.ResolveSerial(obj); if (serial <= 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return(false); } Mobile mobile = Engine.Mobiles.GetMobile(serial); if (mobile != null) { return(mobile.Status.HasFlag(MobileStatus.Hidden)); } UOC.SystemMessage(Strings.Mobile_not_found___); return(false); }
public static void TargetByResource(object toolObj, string resourceType) { int serial = AliasCommands.ResolveSerial(toolObj); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return; } try { TargetResourceType resourceEnum = Utility.GetEnumValueByName <TargetResourceType>(resourceType); Engine.SendPacketToServer(new TargetByResource(serial, (int)resourceEnum)); } catch (InvalidOperationException) { } }
public static void UseObject(object obj, bool skipQueue = false) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return; } if (!Options.CurrentOptions.UseObjectQueue || skipQueue) { Engine.SendPacketToServer(new UseObject(serial)); } else if (Engine.UseObjectQueue.Count < Options.CurrentOptions.UseObjectQueueAmount) { Engine.UseObjectQueue.Enqueue(serial); } }
public static bool Property(object obj, string value) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return(false); } Entity entity = (Entity)Engine.Items.GetItem(serial) ?? Engine.Mobiles.GetMobile(serial); if (entity?.Properties != null) { return(entity.Properties.Any(pe => pe.Text.ToLower().Contains(value.ToLower()))); } UOC.SystemMessage(Strings.Item_properties_null_or_not_loaded___); return(false); }
public static bool InRange(object obj, int distance) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return(false); } Entity entity = Engine.Items.GetItem(serial) ?? (Entity)Engine.Mobiles.GetMobile(serial); if (entity != null) { return(entity.Distance < distance); } UOC.SystemMessage(Strings.Cannot_find_item___); return(false); }
public static void UseType(object type, int hue = -1, object container = null) { int serial = AliasCommands.ResolveSerial(type); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return; } if (container == null) { container = Engine.Player?.Backpack?.Serial; } int containerSerial = AliasCommands.ResolveSerial(container); if (!Engine.Items.GetItem(containerSerial, out Item containerItem)) { UOC.SystemMessage(Strings.Cannot_find_container___); return; } Item useItem = hue == -1 ? containerItem.Container?.SelectEntity(i => i.ID == serial) : containerItem.Container?.SelectEntity(i => i.ID == serial && i.Hue == hue); if (useItem == null) { UOC.SystemMessage(Strings.Cannot_find_item___); return; } if (!AbilitiesManager.GetInstance().CheckHands(useItem.Serial)) { Engine.SendPacketToServer(new UseObject(useItem.Serial)); } }
public static void Target(object obj, bool checkRange = false, bool useQueue = false) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { return; } if (checkRange && UOMath.IsMobile(serial)) { Mobile mobile = Engine.Mobiles.GetMobile(serial); if (mobile != null) { if (mobile.Distance > Options.CurrentOptions.RangeCheckLastTargetAmount) { UOC.SystemMessage(Strings.Target_out_of_range__try_again___); UOC.ResendTargetToClient(); return; } } else { UOC.SystemMessage(Strings.Target_out_of_range__try_again___); UOC.ResendTargetToClient(); return; } } if (useQueue && !Engine.TargetExists) { MsgCommands.HeadMsg(Strings.Target_Queued, Engine.Player?.Serial); Engine.LastTargetQueue.Enqueue(serial); } else { Engine.SendPacketToServer(new Target(TargetType.Object, -1, TargetFlags.None, serial, -1, -1, -1, 0, true)); } }
public static bool Flying(object obj) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return(false); } Mobile mobile = Engine.Mobiles.GetMobile(serial); if (mobile == null) { // TODO better message UOC.SystemMessage(Strings.Cannot_find_item___); return(false); } return(mobile.Status.HasFlag(MobileStatus.Flying)); }
public static void RemoveFriend(object obj = null) { int serial = obj != null ? AliasCommands.ResolveSerial(obj) : UOC.GetTargeSerialAsync(Strings.Target_friend_to_remove___).Result; if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return; } FriendEntry entry = Options.CurrentOptions.Friends.FirstOrDefault(i => i.Serial == serial); if (entry == null) { return; } Engine.Dispatcher?.Invoke(() => Options.CurrentOptions.Friends.Remove(entry)); }
public static void SetOrganizerContainers(string entryName, object sourceContainer = null, object destinationContainer = null) { int sourceSerial = AliasCommands.ResolveSerial(sourceContainer, false); int destinationSerial = AliasCommands.ResolveSerial(destinationContainer, false); OrganizerManager manager = OrganizerManager.GetInstance(); OrganizerEntry entry = manager.Items.FirstOrDefault(e => e.Name.ToLower().Equals(entryName.ToLower())); if (entry == null) { UOC.SystemMessage(Strings.Invalid_organizer_agent_name___, true); return; } entry.SourceContainer = sourceSerial; entry.DestinationContainer = destinationSerial; UOC.SystemMessage(Strings.Organizer_containers_set___, true); }
public static void SetLastTarget(object obj) { int serial = AliasCommands.ResolveSerial(obj); if (serial <= 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return; } Entity entity = Engine.Items.GetItem(serial) ?? (Entity)Engine.Mobiles.GetMobile(serial); if (entity == null) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return; } TargetManager.GetInstance().SetLastTarget(entity); }
public static bool FindType(int graphic, int range = -1, object findLocation = null, int hue = -1) { int owner = 0; if (findLocation != null) { owner = AliasCommands.ResolveSerial(findLocation); } Entity entity; bool Predicate(Entity i) { return(i.ID == graphic && (hue == -1 || i.Hue == hue) && (range == -1 || i.Distance < range) && !_ignoreList.Contains(i.Serial)); } if (owner != 0) { entity = Engine.Items.SelectEntities(i => Predicate(i) && i.IsDescendantOf(owner)) ?.FirstOrDefault(); } else { entity = (Entity)Engine.Mobiles.SelectEntities(Predicate)?.FirstOrDefault() ?? Engine.Items.SelectEntities(i => Predicate(i) && i.Owner == 0)?.FirstOrDefault(); } if (entity == null) { return(false); } AliasCommands.SetAlias("found", entity.Serial); UOC.SystemMessage(string.Format(Strings.Object___0___updated___, "found")); return(true); }
public static bool FindWand(string wandName, object containerSource = null, int minimumCharges = -1) { try { WandTypes wandType = Utility.GetEnumValueByName <WandTypes>(wandName); int containerSerial = AliasCommands.ResolveSerial(containerSource); if (containerSource == null) { containerSerial = -1; } Item[] matches = FindWands(wandType, containerSerial, minimumCharges).Result; if (matches == null) { UOC.SystemMessage(Strings.Cannot_find_item___); return(false); } AliasCommands.SetMacroAlias("found", matches.First().Serial); if (MacroManager.QuietMode) { return(true); } UOC.SystemMessage(string.Format(Strings.Object___0___updated___, "found")); return(true); } catch (InvalidOperationException) { UOC.SystemMessage(string.Format(Strings.Invalid_skill_name___0__, wandName)); } return(false); }
public static int AddFriend(object obj = null) { int serial = obj != null ? AliasCommands.ResolveSerial(obj) : UOC.GetTargetSerialAsync(Strings.Target_new_friend___).Result; if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return(0); } Mobile m = Engine.Mobiles.GetMobile(serial); if (m == null) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return(0); } FriendEntry fe = new FriendEntry { Name = m.Name?.Trim(), Serial = m.Serial }; if (!Options.CurrentOptions.Friends.Contains(fe)) { Engine.Dispatcher?.Invoke(() => { Options.CurrentOptions.Friends.Add(fe); if (Options.CurrentOptions.RehueFriends) { MainCommands.Resync(); } }); } return(m.Serial); }
public static int X(object obj = null) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return(0); } Entity entity = UOMath.IsMobile(serial) ? Engine.Mobiles.GetMobile(serial) : Engine.Items.GetItem(serial) as Entity; if (entity != null) { return(entity.X); } UOC.SystemMessage(Strings.Entity_not_found___); return(0); }
public static bool MoveTypeOffset(int id, object findLocation, int xOffset, int yOffset, int zOffset, int amount = -1) { if (findLocation == null || ((string)findLocation).Equals("ground", StringComparison.InvariantCultureIgnoreCase)) { UOC.SystemMessage(Strings.Invalid_container___); return(false); } int owner = AliasCommands.ResolveSerial(findLocation); bool Predicate(Item i) { return(i.ID == id && i.IsDescendantOf(owner)); } Item entity = Engine.Items.SelectEntities(Predicate)?.FirstOrDefault(); if (entity == null) { return(false); } PlayerMobile player = Engine.Player; if (player == null) { return(false); } int x = player.X + xOffset; int y = player.Y + yOffset; int z = player.Z + zOffset; ActionPacketQueue.EnqueueDragDropGround(entity.Serial, amount, x, y, z); return(true); }
public static void Pathfind(object obj) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { UOC.SystemMessage(Strings.Entity_not_found___); return; } Entity entity = UOMath.IsMobile(serial) ? (Entity)Engine.Mobiles.GetMobile(serial) : Engine.Items.GetItem(serial); if (entity == null) { UOC.SystemMessage(Strings.Entity_not_found___); return; } Pathfind(entity.X, entity.Y, entity.Z); }
public static bool WaitForContext(object obj, int entry, int timeout) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return(false); } AutoResetEvent are = new AutoResetEvent(false); PacketFilterInfo pfi = new PacketFilterInfo(0xBF, new[] { PacketFilterConditions.ShortAtPositionCondition(0x14, 3), PacketFilterConditions.IntAtPositionCondition(serial, 7) }, (bytes, info) => { Engine.SendPacketToServer(new ContextMenuClick(serial, entry)); are.Set(); }); Engine.AddReceiveFilter(pfi); Engine.SendPacketToServer(new ContextMenuRequest(serial)); try { bool result = are.WaitOne(timeout); return(result); } finally { Engine.RemoveReceiveFilter(pfi); } }
public static int CountType(int graphic, object source = null, int hue = -1) { if (source == null) { source = "backpack"; } int sourceSerial = AliasCommands.ResolveSerial(source); Item countainerItem = Engine.Items.GetItem(sourceSerial); if (countainerItem?.Container == null) { UOC.SystemMessage(Strings.Invalid_container___); return(0); } Item[] matches = countainerItem.Container.SelectEntities(i => i.ID == graphic && (hue == -1 || i.Hue == hue)); return(matches?.Sum(i => i.Count) ?? 0); }
public static void TargetGround(object obj, int hue = -1, int range = -1) { int id = AliasCommands.ResolveSerial(obj); if (id == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return; } Entity entity = (Entity)Engine.Items.SelectEntity(i => i.ID == id && (hue == -1 || i.Hue == hue) && (range == -1 || i.Distance < range)) ?? Engine.Mobiles.SelectEntity(m => m.ID == id && (hue == -1 || m.Hue == hue) && (range == -1 || m.Distance < range)); if (entity == null) { UOC.SystemMessage(Strings.Cannot_find_item___); return; } Target(entity.Serial, false, Options.CurrentOptions.QueueLastTarget); }
public static bool InRegion(string attribute, object obj) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return(false); } Entity entity = (Entity)Engine.Items.GetItem(serial) ?? Engine.Mobiles.GetMobile(serial); if (entity == null) { UOC.SystemMessage(Strings.Cannot_find_item___); return(false); } RegionAttributes attr = Utility.GetEnumValueByName <RegionAttributes>(attribute); Region region = entity.GetRegion(); return(region != null && region.Attributes.HasFlag(attr)); }
public static bool InFriendList(object obj) { int serial = AliasCommands.ResolveSerial(obj); if (serial != 0) { bool result = Options.CurrentOptions.Friends.Any(fe => fe.Serial == serial); if (result) { return(true); } if (Options.CurrentOptions.IncludePartyMembersInFriends) { result = Engine.Player?.Party?.Contains(serial) ?? false; } return(result); } UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return(false); }
public static void Organizer(string name, object sourceContainer = null, object destinationContainer = null) { OrganizerManager manager = OrganizerManager.GetInstance(); OrganizerEntry entry = manager.Items.FirstOrDefault(oa => oa.Name.ToLower().Equals(name.ToLower())); if (entry == null) { UOC.SystemMessage(string.Format(Strings.Organizer___0___not_found___, name)); return; } if (sourceContainer != null && destinationContainer != null) { int sourceContainerSerial = AliasCommands.ResolveSerial(sourceContainer); int destinatinContainerSerial = AliasCommands.ResolveSerial(destinationContainer); manager.Organize(entry, sourceContainerSerial, destinatinContainerSerial).Wait(); } else { manager.Organize(entry).Wait(); } }
public static void MoveItemOffset(object obj, int xOffset, int yOffset, int zOffset, int amount = -1) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return; } PlayerMobile player = Engine.Player; if (player == null) { return; } int x = player.X + xOffset; int y = player.Y + yOffset; int z = player.Z + zOffset; ActionPacketQueue.EnqueueDragDropGround(serial, amount, x, y, z); }
public static void TargetTileRelative(object obj, int distance, bool reverse = false, int itemID = 0) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return; } Entity entity = Engine.Mobiles.GetMobile(serial); if (entity == null) { if (!MacroManager.QuietMode) { UOC.SystemMessage(Strings.Mobile_not_found___); } return; } int x = entity.X; int y = entity.Y; int offsetX = 0; int offsetY = 0; // TODO Direction direction = (Direction)((int)entity.Direction & ~0x80); switch (direction) { case Direction.North: offsetY = -1; break; case Direction.Northeast: offsetY = -1; offsetX = 1; break; case Direction.East: offsetX = 1; break; case Direction.Southeast: offsetX = 1; offsetY = 1; break; case Direction.South: offsetY = 1; break; case Direction.Southwest: offsetY = 1; offsetX = -1; break; case Direction.West: offsetX = -1; break; case Direction.Northwest: offsetX = -1; offsetY = -1; break; case Direction.Invalid: break; default: throw new ArgumentOutOfRangeException(); } int totalOffsetX = offsetX * distance; int totalOffsetY = offsetY * distance; if (reverse) { totalOffsetX = -totalOffsetX; totalOffsetY = -totalOffsetY; } int destinationX = x + totalOffsetX; int destinationY = y + totalOffsetY; (int surfaceZ, int surfaceID) = MapInfo.GetMapSurface((int)Engine.Player.Map, destinationX, destinationY); if (itemID == 0) { itemID = surfaceID; } TargetXYZ(destinationX, destinationY, surfaceZ, itemID); }
public static bool FindLayer(object layer, object obj = null) { if (obj == null) { obj = "self"; } int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return(false); } Layer layerValue = Layer.Invalid; switch (layer) { case string s: layerValue = Utility.GetEnumValueByName <Layer>(s); break; case int i: layerValue = (Layer)i; break; case Layer l: layerValue = l; break; } if (layerValue == Layer.Invalid) { UOC.SystemMessage(Strings.Invalid_layer_value___); return(false); } if (!UOMath.IsMobile(serial)) { UOC.SystemMessage(Strings.Cannot_find_item___); return(false); } Mobile mobile = Engine.Mobiles.GetMobile(serial); int layerSerial = mobile?.GetLayer(layerValue) ?? 0; if (layerSerial == 0) { AliasCommands.UnsetAlias("found"); return(false); } AliasCommands.SetMacroAlias("found", layerSerial); if (MacroManager.QuietMode) { return(true); } UOC.SystemMessage(string.Format(Strings.Object___0___updated___, "found")); return(true); }
public static void TargetTileRelative(object obj, int distance, bool reverse = false) { int serial = AliasCommands.ResolveSerial(obj); if (serial == 0) { UOC.SystemMessage(Strings.Invalid_or_unknown_object_id); return; } Entity entity = Engine.Mobiles.GetMobile(serial); if (entity == null) { UOC.SystemMessage(Strings.Mobile_not_found___); return; } int x = entity.X; int y = entity.Y; int offsetX = 0; int offsetY = 0; // TODO Direction direction = (Direction)((int)entity.Direction & ~0x80); switch (direction) { case Direction.North: offsetY = -1; break; case Direction.Northeast: offsetY = -1; offsetX = 1; break; case Direction.East: offsetX = 1; break; case Direction.Southeast: offsetX = 1; offsetY = 1; break; case Direction.South: offsetY = 1; break; case Direction.Southwest: offsetY = 1; offsetX = -1; break; case Direction.West: offsetX = -1; break; case Direction.Northwest: offsetX = -1; offsetY = -1; break; case Direction.Invalid: break; default: throw new ArgumentOutOfRangeException(); } int totalOffsetX = offsetX * distance; int totalOffsetY = offsetY * distance; if (reverse) { totalOffsetX = -totalOffsetX; totalOffsetY = -totalOffsetY; } int destinationX = x + totalOffsetX; int destinationY = y + totalOffsetY; Engine.SendPacketToServer(new Target(TargetType.Tile, -1, TargetFlags.None, 0, destinationX, destinationY, entity.Z, 0, true)); }