示例#1
0
        public uint FindNPC()
        {
            int  no_rec = s_dt.Rows.Count;
            int  sel    = 0;
            uint found  = 0x0;

            while (no_rec > sel)
            {
                uint   addr = (uint)s_dt.Rows[sel]["address"];
                byte[] ret  = khan.ReadByte(addr, (uint)2);
                byte[] cnv  = new byte[2] {
                    ret[0], ret[1]
                };
                int val = (int)BitConverter.ToInt16(cnv, 0);
                if (val == 9224)
                {
                    found = addr;
                    break;
                }
                sel++;
            }
            if (found > 0)
            {
                MessageBox.Show("NPC found.", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("No NPC found in search.", "Info", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return(found);
        }
示例#2
0
        private static void Pulse()
        {
            var objectManager  = _reader.ReadUInt((uint)Offsets.WowObjectManager.BASE);
            var currentObject  = _reader.ReadUInt(objectManager + (uint)Offsets.WowObjectManager.FIRST_OBJECT);
            var activeGuidList = new List <ulong>();

            while (currentObject != 0 && (currentObject & 1) == 0)
            {
                var objectType = _reader.ReadByte(currentObject + (uint)Offsets.WowObject.OBJECT_FIELD_TYPE);
                switch (objectType)
                {
                case (byte)ObjectType.Unit:
                {
                    var unit = new WowUnit(_reader, currentObject);
                    _objects.GetOrAdd(unit.Guid, unit);
                    activeGuidList.Add(unit.Guid);
                    break;
                }

                case (byte)ObjectType.Player:
                {
                    var player = new WowPlayer(_process, _reader, currentObject);
                    _objects.GetOrAdd(player.Guid, player);
                    activeGuidList.Add(player.Guid);
                    break;
                }

                case (byte)ObjectType.Item:
                {
                    break;
                }

                case (byte)ObjectType.GameObject:
                {
                    var obj = new WowGameObject(_reader, currentObject);
                    _objects.GetOrAdd(obj.Guid, obj);
                    activeGuidList.Add(obj.Guid);
                    break;
                }
                }

                var nextObject = _reader.ReadUInt(currentObject + (uint)Offsets.WowObjectManager.NEXT_OBJECT);

                if (nextObject == currentObject)
                {
                    break;
                }

                currentObject = nextObject;
            }

            var deadGuids = _objects.Keys.Where(k => !activeGuidList.Contains(k)).Select(k => k);

            foreach (var guid in deadGuids)
            {
                IWowObject deadObject;
                _objects.TryRemove(guid, out deadObject);
            }
        }
示例#3
0
        public Combatant GetCombatantByPtr(IntPtr CombatantPtr)
        {
            byte b = mReader.ReadByte(IntPtr.Add(CombatantPtr, 140));

            if (b != 1 && b != 2)
            {
                return(null);
            }
            Combatant combatant = new Combatant();

            combatant.Pointer = CombatantPtr;
            combatant.type    = b;
            combatant.ID      = (uint)mReader.ReadInt32(IntPtr.Add(CombatantPtr, 116));
            if (combatant.ID == 0 || combatant.ID == 3758096384u)
            {
                return(null);
            }
            byte[] array = mReader.ReadByteArray(IntPtr.Add(CombatantPtr, 48), 64);
            if (array == null || array.Length == 0)
            {
                return(null);
            }
            combatant.Name = (Encoding.UTF8.GetString(array) ?? "");
            if (combatant.Name.IndexOf('\0') > 0)
            {
                combatant.Name = combatant.Name.Substring(0, combatant.Name.IndexOf('\0'));
            }
            if (combatant.Name.IndexOf('\0') == 0)
            {
                return(null);
            }
            if (combatant.Name.Length == 0)
            {
                return(null);
            }
            combatant.OwnerID = (uint)mReader.ReadInt32(IntPtr.Add(CombatantPtr, 132));
            if (combatant.OwnerID == 3758096384u)
            {
                combatant.OwnerID = 0u;
            }
            combatant.BNpcID = (uint)mReader.ReadInt32(IntPtr.Add(CombatantPtr, 128));
            byte[] value = mReader.ReadByteArray(IntPtr.Add(CombatantPtr, 160), 20);
            combatant.PosX = BitConverter.ToSingle(value, 0);
            combatant.PosZ = BitConverter.ToSingle(value, 4);
            combatant.PosY = BitConverter.ToSingle(value, 8);
            int WorldOffset = 5966;

            combatant.WorldID = BitConverter.ToUInt16(mReader.ReadByteArray(IntPtr.Add(CombatantPtr, WorldOffset), 2), 0);
            if (combatant.WorldID == 65535)
            {
                combatant.WorldID   = 0;
                combatant.WorldName = "";
            }
            else
            {
                //combatant.WorldName = WorldList.Instance.GetWorldNameById(combatant.WorldID);
            }
            int offset2 = 5936;

            combatant.BNpcNameID = (uint)mReader.ReadInt32(IntPtr.Add(CombatantPtr, offset2));
            int offset3 = 5976;

            byte[] array2 = mReader.ReadByteArray(IntPtr.Add(CombatantPtr, offset3), 60);
            if (array2 != null && array2.Length == 60)
            {
                combatant.CurrentHP = BitConverter.ToInt32(array2, 0);
                combatant.MaxHP     = BitConverter.ToInt32(array2, 4);
                combatant.CurrentMP = BitConverter.ToInt32(array2, 8);
                combatant.MaxMP     = BitConverter.ToInt32(array2, 12);
                combatant.CurrentTP = BitConverter.ToInt16(array2, 16);
                combatant.MaxTP     = 1000;
                if (combatant.CurrentTP < 0)
                {
                    combatant.CurrentTP = 0;
                }
                else if (combatant.CurrentTP > combatant.MaxTP)
                {
                    combatant.CurrentTP = combatant.MaxTP;
                }
                combatant.CurrentGP = BitConverter.ToInt16(array2, 18);
                combatant.MaxGP     = BitConverter.ToInt16(array2, 20);
                if (combatant.MaxGP == 0)
                {
                    combatant.CurrentGP = 0;
                }
                combatant.CurrentCP = BitConverter.ToInt16(array2, 22);
                combatant.MaxCP     = BitConverter.ToInt16(array2, 24);
                combatant.Job       = array2[56];
                combatant.Level     = array2[58];
            }
            int offset4 = 6912;

            byte[] array3 = mReader.ReadByteArray(IntPtr.Add(CombatantPtr, offset4), 64);
            if (array3 != null && array3.Length == 64)
            {
                combatant.IsCasting           = (array3[0] == 1 && array3[1] == 1);
                combatant.CastBuffID          = BitConverter.ToUInt32(array3, 4);
                combatant.CastTargetID        = BitConverter.ToUInt32(array3, 16);
                combatant.CastDurationCurrent = BitConverter.ToSingle(array3, 52);
                combatant.CastDurationMax     = BitConverter.ToSingle(array3, 56);
            }
            return(combatant);
        }