public static ObjectGuid Create(HighGuid type, ulong counter) { switch (type) { case HighGuid.Uniq: case HighGuid.Party: case HighGuid.WowAccount: case HighGuid.BNetAccount: case HighGuid.GMTask: case HighGuid.RaidGroup: case HighGuid.Spell: case HighGuid.Mail: case HighGuid.UserRouter: case HighGuid.PVPQueueGroup: case HighGuid.UserClient: case HighGuid.UniqUserClient: case HighGuid.BattlePet: case HighGuid.CommerceObj: case HighGuid.ClientSession: return(GlobalCreate(type, counter)); case HighGuid.Player: case HighGuid.Item: // This is not exactly correct, there are 2 more unknown parts in highguid: (high >> 10 & 0xFF), (high >> 18 & 0xFFFFFF) case HighGuid.Guild: case HighGuid.Transport: return(RealmSpecificCreate(type, counter)); default: Log.outError(LogFilter.Server, "This guid type cannot be constructed using Create(HighGuid: {0} ulong counter).", type); break; } return(ObjectGuid.Empty); }
public static bool IsMapSpecific(HighGuid high) { switch (high) { case HighGuid.Conversation: case HighGuid.Creature: case HighGuid.Vehicle: case HighGuid.Pet: case HighGuid.GameObject: case HighGuid.DynamicObject: case HighGuid.AreaTrigger: case HighGuid.Corpse: case HighGuid.LootObject: case HighGuid.SceneObject: case HighGuid.Scenario: case HighGuid.AIGroup: case HighGuid.DynamicDoor: case HighGuid.Vignette: case HighGuid.CallForHelp: case HighGuid.AIResource: case HighGuid.AILock: case HighGuid.AILockTicket: return(true); default: return(false); } }
protected WorldObject FindClosestObject(HighGuid highGuidType, Func <WorldObject, bool> additionalCheck = null) { float closestDistance = float.MaxValue; WorldObject closestObject = null; foreach (var obj in Objects.Values) { if (!obj.GUID.isType(highGuidType)) { continue; } if (additionalCheck != null && !additionalCheck(obj)) { continue; } if (obj.MapID != Player.MapID) { continue; } float distance = (obj - Player).Length; if (distance < closestDistance) { closestDistance = distance; closestObject = obj; } } return(closestObject); }
public static ObjectGuid Create(HighGuid type, uint mapId, uint entry, ulong counter) { if (type == HighGuid.Transport) { return(ObjectGuid.Empty); } return(MapSpecificCreate(type, 0, (ushort)mapId, 0, entry, counter)); }
public static ulong GetMaxCounter(HighGuid highGuid) { if (highGuid == HighGuid.Transport) { return(0xFFFFF); } else { return(0xFFFFFFFFFF); } }
public ulong extractLowGuidFromLink(StringArguments args, ref HighGuid guidHigh) { int type; string[] guidKeys = { "Hplayer", "Hcreature", "Hgameobject" }; // |color|Hcreature:creature_guid|h[name]|h|r // |color|Hgameobject:go_guid|h[name]|h|r // |color|Hplayer:name|h[name]|h|r string idS = extractKeyFromLink(args, guidKeys, out type); if (string.IsNullOrEmpty(idS)) return 0; switch (type) { case 0: { guidHigh = HighGuid.Player; if (!ObjectManager.NormalizePlayerName(ref idS)) return 0; Player player = Global.ObjAccessor.FindPlayerByName(idS); if (player) return player.GetGUID().GetCounter(); ObjectGuid guid = Global.CharacterCacheStorage.GetCharacterGuidByName(idS); if (guid.IsEmpty()) return 0; return guid.GetCounter(); } case 1: { guidHigh = HighGuid.Creature; if (!ulong.TryParse(idS, out ulong lowguid)) return 0; return lowguid; } case 2: { guidHigh = HighGuid.GameObject; if (!ulong.TryParse(idS, out ulong lowguid)) return 0; return lowguid; } } // unknown type? return 0; }
static ObjectGuid RealmSpecificCreate(HighGuid type, ulong counter) { if (type == HighGuid.Transport) { return(new ObjectGuid((ulong)type << 58 | (counter << 38), 0)); } else { return(new ObjectGuid((ulong)type << 58 | (ulong)Global.WorldMgr.GetRealm().Id.Realm << 42, counter)); } }
static bool HasEntry(HighGuid high) { switch (high) { case HighGuid.GameObject: case HighGuid.Creature: case HighGuid.Pet: case HighGuid.Vehicle: default: return(true); } }
public static bool IsRealmSpecific(HighGuid high) { switch (high) { case HighGuid.Player: case HighGuid.Item: case HighGuid.Transport: case HighGuid.Guild: return(true); default: return(false); } }
private static bool HasEntry(HighGuid high) { switch (high) { case HighGuid.Item: case HighGuid.Player: case HighGuid.DynamicObject: case HighGuid.Corpse: case HighGuid.MoTransport: case HighGuid.Instance: case HighGuid.Group: return(false); case HighGuid.GameObject: case HighGuid.Transport: case HighGuid.Unit: case HighGuid.Pet: case HighGuid.Vehicle: default: return(true); } }
//Static Methods static TypeId GetTypeId(HighGuid high) { switch (high) { case HighGuid.Item: return(TypeId.Item); case HighGuid.Creature: case HighGuid.Pet: case HighGuid.Vehicle: return(TypeId.Unit); case HighGuid.Player: return(TypeId.Player); case HighGuid.GameObject: case HighGuid.Transport: return(TypeId.GameObject); case HighGuid.DynamicObject: return(TypeId.DynamicObject); case HighGuid.Corpse: return(TypeId.Corpse); case HighGuid.AreaTrigger: return(TypeId.AreaTrigger); case HighGuid.SceneObject: return(TypeId.SceneObject); case HighGuid.Conversation: return(TypeId.Conversation); default: return(TypeId.Object); } }
public static bool IsGlobal(HighGuid high) { switch (high) { case HighGuid.Uniq: case HighGuid.Party: case HighGuid.WowAccount: case HighGuid.BNetAccount: case HighGuid.GMTask: case HighGuid.RaidGroup: case HighGuid.Spell: case HighGuid.Mail: case HighGuid.UserRouter: case HighGuid.PVPQueueGroup: case HighGuid.UserClient: case HighGuid.UniqUserClient: case HighGuid.BattlePet: return(true); default: return(false); } }
public bool IsType(HighGuid highGuidType) { return(Utility.IsType(GUID, highGuidType)); }
public ObjectGuidGenerator(HighGuid highGuid, ulong start = 1) { _highGuid = highGuid; _nextGuid = start; }
public static bool IsType(this UInt64 guid, HighGuid highGuidType) { return(((guid & 0xF0F0000000000000) >> 52) == (UInt64)highGuidType); }
public bool IsType(HighGuid highGuidType) { return(((GUID & 0xF0F0000000000000) >> 52) == (ulong)highGuidType); }
HighGuid GetHigh() { HighGuid temp = (HighGuid)((Value >> 48) & 0x0000FFFF); return((HighGuid)((temp == HighGuid.Corpse || temp == HighGuid.AreaTrigger) ? temp : (HighGuid)(((int)temp >> 4) & 0x00000FFF))); }
static ObjectGuid RealmSpecificCreate(HighGuid type, ulong counter) { return(new ObjectGuid(((ulong)type << 58 | (ulong)Global.WorldMgr.GetRealm().Id.Realm << 42), counter)); }
/// <summary> /// Indicates if the <see cref="ObjectGuid"/> is associated with an Object Type <paramref name="guidType"/>. /// </summary> /// <param name="guidType">Type of GUID.</param> /// <returns>True if <see cref="ObjectType"/> is the same as <paramref name="guidType"/>.</returns> public bool isType(HighGuid guidType) { return(guidType == ObjectType); }
protected WorldObject FindClosestObject(HighGuid highGuidType, Func<WorldObject, bool> additionalCheck = null) { float closestDistance = float.MaxValue; WorldObject closestObject = null; foreach (var obj in Objects.Values) { if (!obj.IsType(highGuidType)) continue; if (additionalCheck != null && !additionalCheck(obj)) continue; if (obj.MapID != Player.MapID) continue; float distance = (obj - Player).Length; if (distance < closestDistance) { closestDistance = distance; closestObject = obj; } } return closestObject; }
public ulong extractLowGuidFromLink(StringArguments args, ref HighGuid guidHigh) { int type; string[] guidKeys = { "Hplayer", "Hcreature", "Hgameobject" }; // |color|Hcreature:creature_guid|h[name]|h|r // |color|Hgameobject:go_guid|h[name]|h|r // |color|Hplayer:name|h[name]|h|r string idS = extractKeyFromLink(args, guidKeys, out type); if (string.IsNullOrEmpty(idS)) { return(0); } switch (type) { case 0: { guidHigh = HighGuid.Player; if (!ObjectManager.NormalizePlayerName(ref idS)) { return(0); } Player player = Global.ObjAccessor.FindPlayerByName(idS); if (player) { return(player.GetGUID().GetCounter()); } ObjectGuid guid = ObjectManager.GetPlayerGUIDByName(idS); if (guid.IsEmpty()) { return(0); } return(guid.GetCounter()); } case 1: { guidHigh = HighGuid.Creature; ulong lowguid = ulong.Parse(idS); return(lowguid); } case 2: { guidHigh = HighGuid.GameObject; ulong lowguid = ulong.Parse(idS); return(lowguid); } } // unknown type? return(0); }
public static ObjectGuid CreateGlobal(HighGuid type, ulong dbIdHigh, ulong dbId) { return(new ObjectGuid((ulong)(((ulong)type << 58) | ((ulong)(dbIdHigh & (ulong)0x3FFFFFFFFFFFFFF))), dbId)); }
public static ObjectGuid CreateTransport(HighGuid type, ulong counter) { return(new ObjectGuid((ulong)(((ulong)type << 58) | ((ulong)counter << 38)), 0ul)); }
public static ObjectGuid CreateWorldObject(HighGuid type, byte subType, uint realmId, ushort mapId, uint serverId, uint entry, ulong counter) { return(new ObjectGuid((ulong)(((ulong)type << 58) | ((ulong)(GetRealmIdForObjectGuid(realmId) & 0x1FFF) << 42) | ((ulong)(mapId & 0x1FFF) << 29) | ((ulong)(entry & 0x7FFFFF) << 6) | ((ulong)(subType) & 0x3F)), (ulong)(((ulong)(serverId & 0xFFFFFF) << 40) | (counter & (ulong)0xFFFFFFFFFF)))); }
public static ObjectGuid Create(HighGuid type, SpellCastSource subType, uint mapId, uint entry, ulong counter) { return(MapSpecificCreate(type, (byte)subType, (ushort)mapId, 0, entry, counter)); }
static ObjectGuid GlobalCreate(HighGuid type, ulong counter) { return(new ObjectGuid(((ulong)type << 58), counter)); }
public ObjectGuid(uint index, TypeId type, HighGuid high) { TypeId = type; HighGuid = high; RawGuid = index | ((ulong)type << 24) | ((ulong)high << 48); }
static ObjectGuid MapSpecificCreate(HighGuid type, byte subType, ushort mapId, uint serverId, uint entry, ulong counter) { return(new ObjectGuid((((ulong)type << 58) | ((ulong)(Global.WorldMgr.GetRealm().Id.Realm & 0x1FFF) << 42) | ((ulong)(mapId & 0x1FFF) << 29) | ((ulong)(entry & 0x7FFFFF) << 6) | ((ulong)subType & 0x3F)), (((ulong)(serverId & 0xFFFFFF) << 40) | (counter & 0xFFFFFFFFFF)))); }
public bool IsType(HighGuid highGuidType) { return ((GUID & 0xF0F0000000000000) >> 52) == (ulong)highGuidType; }
public static ObjectGuid CreateClient(HighGuid type, uint realmId, uint arg1, ulong counter) { return(new ObjectGuid((ulong)(((ulong)type << 58) | ((ulong)(GetRealmIdForObjectGuid(realmId) & 0x1FFF) << 42) | ((ulong)(arg1 & 0xFFFFFFFF) << 10)), counter)); }
public static ObjectGuid Create(HighGuid type, uint mapId, uint entry, ulong counter) { return(MapSpecificCreate(type, 0, (ushort)mapId, 0, entry, counter)); }