示例#1
0
        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);
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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);
        }
示例#4
0
        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));
        }
示例#5
0
 public static ulong GetMaxCounter(HighGuid highGuid)
 {
     if (highGuid == HighGuid.Transport)
     {
         return(0xFFFFF);
     }
     else
     {
         return(0xFFFFFFFFFF);
     }
 }
示例#6
0
        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;
        }
示例#7
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));
     }
 }
示例#8
0
 static bool HasEntry(HighGuid high)
 {
     switch (high)
     {
     case HighGuid.GameObject:
     case HighGuid.Creature:
     case HighGuid.Pet:
     case HighGuid.Vehicle:
     default:
         return(true);
     }
 }
示例#9
0
        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);
            }
        }
示例#10
0
        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);
            }
        }
示例#11
0
        //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);
            }
        }
示例#12
0
        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);
            }
        }
示例#13
0
 public bool IsType(HighGuid highGuidType)
 {
     return(Utility.IsType(GUID, highGuidType));
 }
示例#14
0
 public ObjectGuidGenerator(HighGuid highGuid, ulong start = 1)
 {
     _highGuid = highGuid;
     _nextGuid = start;
 }
示例#15
0
 public static bool IsType(this UInt64 guid, HighGuid highGuidType)
 {
     return(((guid & 0xF0F0000000000000) >> 52) == (UInt64)highGuidType);
 }
示例#16
0
 public bool IsType(HighGuid highGuidType)
 {
     return(((GUID & 0xF0F0000000000000) >> 52) == (ulong)highGuidType);
 }
示例#17
0
        HighGuid GetHigh()
        {
            HighGuid temp = (HighGuid)((Value >> 48) & 0x0000FFFF);

            return((HighGuid)((temp == HighGuid.Corpse || temp == HighGuid.AreaTrigger) ? temp : (HighGuid)(((int)temp >> 4) & 0x00000FFF)));
        }
示例#18
0
 static ObjectGuid RealmSpecificCreate(HighGuid type, ulong counter)
 {
     return(new ObjectGuid(((ulong)type << 58 | (ulong)Global.WorldMgr.GetRealm().Id.Realm << 42), counter));
 }
示例#19
0
 /// <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);
 }
示例#20
0
        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;
        }
示例#21
0
        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);
        }
示例#22
0
 public static ObjectGuid CreateGlobal(HighGuid type, ulong dbIdHigh, ulong dbId)
 {
     return(new ObjectGuid((ulong)(((ulong)type << 58) | ((ulong)(dbIdHigh & (ulong)0x3FFFFFFFFFFFFFF))), dbId));
 }
示例#23
0
 public static ObjectGuid CreateTransport(HighGuid type, ulong counter)
 {
     return(new ObjectGuid((ulong)(((ulong)type << 58) | ((ulong)counter << 38)), 0ul));
 }
示例#24
0
 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))));
 }
示例#25
0
 public static ObjectGuid Create(HighGuid type, SpellCastSource subType, uint mapId, uint entry, ulong counter)
 {
     return(MapSpecificCreate(type, (byte)subType, (ushort)mapId, 0, entry, counter));
 }
示例#26
0
 static ObjectGuid GlobalCreate(HighGuid type, ulong counter)
 {
     return(new ObjectGuid(((ulong)type << 58), counter));
 }
示例#27
0
 public ObjectGuid(uint index, TypeId type, HighGuid high)
 {
     TypeId   = type;
     HighGuid = high;
     RawGuid  = index | ((ulong)type << 24) | ((ulong)high << 48);
 }
示例#28
0
 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))));
 }
示例#29
0
 public bool IsType(HighGuid highGuidType)
 {
     return ((GUID & 0xF0F0000000000000) >> 52) == (ulong)highGuidType;
 }
示例#30
0
 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));
 }
示例#31
0
 public static ObjectGuid Create(HighGuid type, uint mapId, uint entry, ulong counter)
 {
     return(MapSpecificCreate(type, 0, (ushort)mapId, 0, entry, counter));
 }