public static CurrentPlayerResult GetCurrentPlayer()
        {
            var result = new CurrentPlayerResult();

            if (!CanGetPlayerInfo() || !MemoryHandler.Instance.IsAttached)
            {
                return(result);
            }

            var PlayerInfoMap = (IntPtr)Scanner.Instance.Locations[Signatures.PlayerInformationKey];

            if (PlayerInfoMap.ToInt64() <= 6496)
            {
                return(result);
            }

            try
            {
                byte[] source = MemoryHandler.Instance.GetByteArray(PlayerInfoMap, MemoryHandler.Instance.Structures.CurrentPlayer.SourceSize);

                try
                {
                    result.CurrentPlayer = CurrentPlayerResolver.ResolvePlayerFromBytes(source);
                }
                catch (Exception ex)
                {
                    MemoryHandler.Instance.RaiseException(Logger, ex, true);
                }

                if (CanGetAgroEntities())
                {
                    var agroCount     = MemoryHandler.Instance.GetInt16(Scanner.Instance.Locations[Signatures.AgroCountKey]);
                    var agroStructure = (IntPtr)Scanner.Instance.Locations[Signatures.AgroMapKey];

                    if (agroCount > 0 && agroCount < 32 && agroStructure.ToInt64() > 0)
                    {
                        var agroSourceSize = MemoryHandler.Instance.Structures.EnmityItem.SourceSize;
                        for (uint i = 0; i < agroCount; i++)
                        {
                            var address   = new IntPtr(agroStructure.ToInt64() + i * agroSourceSize);
                            var agroEntry = new EnmityItem {
                                ID     = (uint)MemoryHandler.Instance.GetPlatformInt(address, MemoryHandler.Instance.Structures.EnmityItem.ID),
                                Name   = MemoryHandler.Instance.GetString(address + MemoryHandler.Instance.Structures.EnmityItem.Name),
                                Enmity = MemoryHandler.Instance.GetUInt32(address + MemoryHandler.Instance.Structures.EnmityItem.Enmity)
                            };
                            if (agroEntry.ID > 0)
                            {
                                result.CurrentPlayer.EnmityItems.Add(agroEntry);
                            }
                        }
                    }
                }
            }
            catch (Exception ex) {
                MemoryHandler.Instance.RaiseException(Logger, ex, true);
                Console.WriteLine(ex.StackTrace);
            }

            return(result);
        }
Exemplo n.º 2
0
        public static TargetResult GetTargetInfo()
        {
            var result = new TargetResult();

            if (!CanGetTargetInfo() || !MemoryHandler.Instance.IsAttached)
            {
                return(result);
            }

            try {
                var targetAddress = (IntPtr)Scanner.Instance.Locations[Signatures.TargetKey];

                if (targetAddress.ToInt64() > 0)
                {
                    byte[] targetInfoSource = MemoryHandler.Instance.GetByteArray(targetAddress, MemoryHandler.Instance.Structures.TargetInfo.SourceSize);

                    var currentTarget   = MemoryHandler.Instance.GetPlatformIntFromBytes(targetInfoSource, MemoryHandler.Instance.Structures.TargetInfo.Current);
                    var mouseOverTarget = MemoryHandler.Instance.GetPlatformIntFromBytes(targetInfoSource, MemoryHandler.Instance.Structures.TargetInfo.MouseOver);
                    var focusTarget     = MemoryHandler.Instance.GetPlatformIntFromBytes(targetInfoSource, MemoryHandler.Instance.Structures.TargetInfo.Focus);
                    var previousTarget  = MemoryHandler.Instance.GetPlatformIntFromBytes(targetInfoSource, MemoryHandler.Instance.Structures.TargetInfo.Previous);

                    var currentTargetID = BitConverter.TryToUInt32(targetInfoSource, MemoryHandler.Instance.Structures.TargetInfo.CurrentID);

                    if (currentTarget > 0)
                    {
                        try {
                            ActorItem entry = GetTargetActorItemFromSource(currentTarget);
                            currentTargetID = entry.ID;
                            if (entry.IsValid)
                            {
                                result.TargetsFound             = true;
                                result.TargetInfo.CurrentTarget = entry;
                            }
                        }
                        catch (Exception ex) {
                            MemoryHandler.Instance.RaiseException(Logger, ex, true);
                        }
                    }

                    if (mouseOverTarget > 0)
                    {
                        try {
                            ActorItem entry = GetTargetActorItemFromSource(mouseOverTarget);
                            if (entry.IsValid)
                            {
                                result.TargetsFound = true;
                                result.TargetInfo.MouseOverTarget = entry;
                            }
                        }
                        catch (Exception ex) {
                            MemoryHandler.Instance.RaiseException(Logger, ex, true);
                        }
                    }

                    if (focusTarget > 0)
                    {
                        try {
                            ActorItem entry = GetTargetActorItemFromSource(focusTarget);
                            if (entry.IsValid)
                            {
                                result.TargetsFound           = true;
                                result.TargetInfo.FocusTarget = entry;
                            }
                        }
                        catch (Exception ex) {
                            MemoryHandler.Instance.RaiseException(Logger, ex, true);
                        }
                    }

                    if (previousTarget > 0)
                    {
                        try {
                            ActorItem entry = GetTargetActorItemFromSource(previousTarget);
                            if (entry.IsValid)
                            {
                                result.TargetsFound = true;
                                result.TargetInfo.PreviousTarget = entry;
                            }
                        }
                        catch (Exception ex) {
                            MemoryHandler.Instance.RaiseException(Logger, ex, true);
                        }
                    }

                    if (currentTargetID > 0)
                    {
                        result.TargetsFound = true;
                        result.TargetInfo.CurrentTargetID = currentTargetID;
                    }
                }

                if (result.TargetInfo.CurrentTargetID > 0)
                {
                    try {
                        if (CanGetEnmityEntities())
                        {
                            var enmityCount     = MemoryHandler.Instance.GetInt16(Scanner.Instance.Locations[Signatures.EnmityCountKey]);
                            var enmityStructure = (IntPtr)Scanner.Instance.Locations[Signatures.EnmityMapKey];

                            if (enmityCount > 0 && enmityCount < 16 && enmityStructure.ToInt64() > 0)
                            {
                                var enmitySourceSize = MemoryHandler.Instance.Structures.EnmityItem.SourceSize;
                                for (uint i = 0; i < enmityCount; i++)
                                {
                                    try {
                                        var address     = new IntPtr(enmityStructure.ToInt64() + i * enmitySourceSize);
                                        var enmityEntry = new EnmityItem {
                                            ID     = (uint)MemoryHandler.Instance.GetPlatformInt(address, MemoryHandler.Instance.Structures.EnmityItem.ID),
                                            Name   = MemoryHandler.Instance.GetString(address + MemoryHandler.Instance.Structures.EnmityItem.Name),
                                            Enmity = MemoryHandler.Instance.GetUInt32(address + MemoryHandler.Instance.Structures.EnmityItem.Enmity)
                                        };
                                        if (enmityEntry.ID <= 0)
                                        {
                                            continue;
                                        }

                                        if (string.IsNullOrWhiteSpace(enmityEntry.Name))
                                        {
                                            ActorItem pc      = PCWorkerDelegate.GetActorItem(enmityEntry.ID);
                                            ActorItem npc     = NPCWorkerDelegate.GetActorItem(enmityEntry.ID);
                                            ActorItem monster = MonsterWorkerDelegate.GetActorItem(enmityEntry.ID);
                                            try {
                                                enmityEntry.Name = (pc ?? npc).Name ?? monster.Name;
                                            }
                                            catch (Exception ex) {
                                                MemoryHandler.Instance.RaiseException(Logger, ex, true);
                                            }
                                        }

                                        result.TargetInfo.EnmityItems.Add(enmityEntry);
                                    }
                                    catch (Exception ex) {
                                        MemoryHandler.Instance.RaiseException(Logger, ex, true);
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex) {
                        MemoryHandler.Instance.RaiseException(Logger, ex, true);
                    }
                }
            }
            catch (Exception ex) {
                MemoryHandler.Instance.RaiseException(Logger, ex, true);
            }

            return(result);
        }
Exemplo n.º 3
0
        public TargetResult GetTargetInfo()
        {
            TargetResult result = new TargetResult();

            if (!this.CanGetTargetInfo() || !this._memoryHandler.IsAttached)
            {
                return(result);
            }

            byte[] targetInfoMap = this._memoryHandler.BufferPool.Rent(this._memoryHandler.Structures.TargetInfo.SourceSize);

            try {
                IntPtr targetAddress = (IntPtr)this._memoryHandler.Scanner.Locations[Signatures.TARGET_KEY];

                if (targetAddress.ToInt64() > 0)
                {
                    this._memoryHandler.GetByteArray(targetAddress, targetInfoMap);

                    long currentTargetAddress   = this._memoryHandler.GetInt64FromBytes(targetInfoMap, this._memoryHandler.Structures.TargetInfo.Current);
                    long mouseOverTargetAddress = this._memoryHandler.GetInt64FromBytes(targetInfoMap, this._memoryHandler.Structures.TargetInfo.MouseOver);
                    long focusTargetAddress     = this._memoryHandler.GetInt64FromBytes(targetInfoMap, this._memoryHandler.Structures.TargetInfo.Focus);
                    long previousTargetAddress  = this._memoryHandler.GetInt64FromBytes(targetInfoMap, this._memoryHandler.Structures.TargetInfo.Previous);

                    uint currentTargetID = SharlayanBitConverter.TryToUInt32(targetInfoMap, this._memoryHandler.Structures.TargetInfo.CurrentID);

                    if (currentTargetAddress > 0)
                    {
                        try {
                            ActorItem entry = this.GetTargetActorItemFromSource(currentTargetAddress);
                            currentTargetID = entry.ID;
                            if (entry.IsValid)
                            {
                                result.TargetsFound             = true;
                                result.TargetInfo.CurrentTarget = entry;
                            }
                        }
                        catch (Exception ex) {
                            this._memoryHandler.RaiseException(Logger, ex);
                        }
                    }

                    if (mouseOverTargetAddress > 0)
                    {
                        try {
                            ActorItem entry = this.GetTargetActorItemFromSource(mouseOverTargetAddress);
                            if (entry.IsValid)
                            {
                                result.TargetsFound = true;
                                result.TargetInfo.MouseOverTarget = entry;
                            }
                        }
                        catch (Exception ex) {
                            this._memoryHandler.RaiseException(Logger, ex);
                        }
                    }

                    if (focusTargetAddress > 0)
                    {
                        try {
                            ActorItem entry = this.GetTargetActorItemFromSource(focusTargetAddress);
                            if (entry.IsValid)
                            {
                                result.TargetsFound           = true;
                                result.TargetInfo.FocusTarget = entry;
                            }
                        }
                        catch (Exception ex) {
                            this._memoryHandler.RaiseException(Logger, ex);
                        }
                    }

                    if (previousTargetAddress > 0)
                    {
                        try {
                            ActorItem entry = this.GetTargetActorItemFromSource(previousTargetAddress);
                            if (entry.IsValid)
                            {
                                result.TargetsFound = true;
                                result.TargetInfo.PreviousTarget = entry;
                            }
                        }
                        catch (Exception ex) {
                            this._memoryHandler.RaiseException(Logger, ex);
                        }
                    }

                    if (currentTargetID > 0)
                    {
                        result.TargetsFound = true;
                        result.TargetInfo.CurrentTargetID = currentTargetID;
                    }
                }

                if (result.TargetInfo.CurrentTargetID > 0)
                {
                    try {
                        if (this.CanGetEnmityEntities())
                        {
                            short  enmityCount     = this._memoryHandler.GetInt16(this._memoryHandler.Scanner.Locations[Signatures.ENMITY_COUNT_KEY]);
                            IntPtr enmityStructure = (IntPtr)this._memoryHandler.Scanner.Locations[Signatures.ENMITYMAP_KEY];

                            if (enmityCount > 0 && enmityCount < 16 && enmityStructure.ToInt64() > 0)
                            {
                                int enmitySourceSize = this._memoryHandler.Structures.EnmityItem.SourceSize;
                                for (uint i = 0; i < enmityCount; i++)
                                {
                                    try {
                                        IntPtr     address     = new IntPtr(enmityStructure.ToInt64() + i * enmitySourceSize);
                                        EnmityItem enmityEntry = new EnmityItem {
                                            ID = this._memoryHandler.GetUInt32(address, this._memoryHandler.Structures.EnmityItem.ID),
                                            // Name = this._memoryHandler.GetString(address + this._memoryHandler.Structures.EnmityItem.Name),
                                            Enmity = this._memoryHandler.GetUInt32(address + this._memoryHandler.Structures.EnmityItem.Enmity),
                                        };
                                        if (enmityEntry.ID <= 0)
                                        {
                                            continue;
                                        }

                                        if (string.IsNullOrWhiteSpace(enmityEntry.Name))
                                        {
                                            ActorItem pc      = this._pcWorkerDelegate.GetActorItem(enmityEntry.ID);
                                            ActorItem npc     = this._npcWorkerDelegate.GetActorItem(enmityEntry.ID);
                                            ActorItem monster = this._monsterWorkerDelegate.GetActorItem(enmityEntry.ID);
                                            try {
                                                enmityEntry.Name = (pc ?? npc).Name ?? monster.Name;
                                            }
                                            catch (Exception ex) {
                                                this._memoryHandler.RaiseException(Logger, ex);
                                            }
                                        }

                                        result.TargetInfo.EnmityItems.Add(enmityEntry);
                                    }
                                    catch (Exception ex) {
                                        this._memoryHandler.RaiseException(Logger, ex);
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex) {
                        this._memoryHandler.RaiseException(Logger, ex);
                    }
                }
            }
            catch (Exception ex) {
                this._memoryHandler.RaiseException(Logger, ex);
            }
            finally {
                this._memoryHandler.BufferPool.Return(targetInfoMap);
            }

            return(result);
        }
Exemplo n.º 4
0
        private PlayerInfo GetPlayerInfo()
        {
            PlayerInfo result = new PlayerInfo();

            if (!this.CanGetPlayerInfo() || !this._memoryHandler.IsAttached)
            {
                return(result);
            }

            IntPtr playerInfoAddress = this._memoryHandler.Scanner.Locations[Signatures.PLAYERINFO_KEY];

            if (playerInfoAddress.ToInt64() <= 6496)
            {
                return(result);
            }

            byte[] playerMap = this._memoryHandler.BufferPool.Rent(this._memoryHandler.Structures.PlayerInfo.SourceSize);

            try {
                this._memoryHandler.GetByteArray(playerInfoAddress, playerMap);

                try {
                    result = this._playerInfoResolver.ResolvePlayerFromBytes(playerMap);
                }
                catch (Exception ex) {
                    this._memoryHandler.RaiseException(Logger, ex);
                }

                if (this.CanGetAgroEntities())
                {
                    short  agroCount     = this._memoryHandler.GetInt16(this._memoryHandler.Scanner.Locations[Signatures.AGRO_COUNT_KEY]);
                    IntPtr agroStructure = (IntPtr)this._memoryHandler.Scanner.Locations[Signatures.AGROMAP_KEY];

                    if (agroCount > 0 && agroCount < 32 && agroStructure.ToInt64() > 0)
                    {
                        int agroSourceSize = this._memoryHandler.Structures.EnmityItem.SourceSize;
                        for (uint i = 0; i < agroCount; i++)
                        {
                            IntPtr     address   = new IntPtr(agroStructure.ToInt64() + i * agroSourceSize);
                            EnmityItem agroEntry = new EnmityItem {
                                ID     = this._memoryHandler.GetUInt32(address, this._memoryHandler.Structures.EnmityItem.ID),
                                Name   = this._memoryHandler.GetString(address + this._memoryHandler.Structures.EnmityItem.Name),
                                Enmity = this._memoryHandler.GetUInt32(address + this._memoryHandler.Structures.EnmityItem.Enmity),
                            };
                            if (agroEntry.ID > 0)
                            {
                                result.EnmityItems.Add(agroEntry);
                            }
                        }
                    }
                }
            }
            catch (Exception ex) {
                this._memoryHandler.RaiseException(Logger, ex);
            }
            finally {
                this._memoryHandler.BufferPool.Return(playerMap);
            }

            return(result);
        }