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