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); }
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); } }
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); }