Ejemplo n.º 1
0
        /// <summary>
        /// </summary>
        /// <param name="sender"> </param>
        /// <param name="e"> </param>
        private void ScanTimerElapsed(object sender, ElapsedEventArgs e)
        {
            if (_isScanning)
            {
                return;
            }
            _isScanning = true;
            double refresh = 1000;

            if (Double.TryParse(Settings.Default.PlayerInfoWorkerRefresh.ToString(CultureInfo.InvariantCulture), out refresh))
            {
                _scanTimer.Interval = refresh;
            }
            Func <bool> scannerWorker = delegate
            {
                if (MemoryHandler.Instance.SigScanner.Locations.ContainsKey("CHARMAP"))
                {
                    if (MemoryHandler.Instance.SigScanner.Locations.ContainsKey("PLAYERINFO"))
                    {
                        PlayerInfoMap = MemoryHandler.Instance.SigScanner.Locations["PLAYERINFO"];
                        if (PlayerInfoMap <= 6496)
                        {
                            return(false);
                        }
                        try
                        {
                            short enmityCount;
                            uint  enmityStructure;
                            switch (Settings.Default.GameLanguage)
                            {
                            case "Chinese":
                                enmityCount     = MemoryHandler.Instance.GetInt16(MemoryHandler.Instance.SigScanner.Locations["CHARMAP"] + 5688);
                                enmityStructure = MemoryHandler.Instance.SigScanner.Locations["CHARMAP"] + 3384;
                                break;

                            default:
                                enmityCount     = MemoryHandler.Instance.GetInt16(MemoryHandler.Instance.SigScanner.Locations["CHARMAP"] - 0x1C590); // 116032
                                enmityStructure = MemoryHandler.Instance.SigScanner.Locations["CHARMAP"] - 0x1CE94;                                  // 118340;
                                break;
                            }
                            var enmityEntries = new List <EnmityEntry>();
                            if (enmityCount > 0 && enmityCount < 32 && enmityStructure > 0)
                            {
                                for (uint i = 0; i < enmityCount; i++)
                                {
                                    var address     = enmityStructure + (i * 72);
                                    var enmityEntry = new EnmityEntry
                                    {
                                        ID     = (uint)MemoryHandler.Instance.GetInt32(address),
                                        Name   = MemoryHandler.Instance.GetString(address + 4),
                                        Enmity = (uint)MemoryHandler.Instance.GetInt16(address + 72)
                                    };
                                    if (enmityEntry.ID > 0)
                                    {
                                        enmityEntries.Add(enmityEntry);
                                    }
                                }
                            }
                            var source = MemoryHandler.Instance.GetByteArray(PlayerInfoMap, 0x256);
                            try
                            {
                                var entry = PlayerEntityHelper.ResolvePlayerFromBytes(source);
                                entry.EnmityEntries = enmityEntries;
                                var notify = false;
                                if (LastPlayerEntity == null)
                                {
                                    LastPlayerEntity = entry;
                                    notify           = true;
                                }
                                else
                                {
                                    var hash1 = JsonConvert.SerializeObject(LastPlayerEntity)
                                                .GetHashCode();
                                    var hash2 = JsonConvert.SerializeObject(entry)
                                                .GetHashCode();
                                    if (!hash1.Equals(hash2))
                                    {
                                        LastPlayerEntity = entry;
                                        notify           = true;
                                    }
                                }
                                if (notify)
                                {
                                    AppContextHelper.Instance.RaiseNewPlayerEntity(entry);
                                }
                            }
                            catch (Exception ex)
                            {
                            }
                        }
                        catch (Exception ex)
                        {
                        }
                    }
                    else
                    {
                        try
                        {
                            switch (Settings.Default.GameLanguage)
                            {
                            case "Chinese":
                                PlayerInfoMap = MemoryHandler.Instance.SigScanner.Locations["CHARMAP"] + 5724;
                                break;

                            default:
                                PlayerInfoMap = MemoryHandler.Instance.SigScanner.Locations["CHARMAP"] - 115996;
                                break;
                            }
                            MemoryHandler.Instance.SigScanner.Locations.Add("PLAYERINFO", PlayerInfoMap);
                        }
                        catch (Exception ex)
                        {
                        }
                    }
                }
                _isScanning = false;
                return(true);
            };

            scannerWorker.BeginInvoke(delegate { }, scannerWorker);
        }
Ejemplo n.º 2
0
        public static PlayerInfoReadResult GetPlayerInfo()
        {
            var result = new PlayerInfoReadResult();

            if (!Scanner.Instance.Locations.ContainsKey("CHARMAP"))
            {
                return(result);
            }
            if (!Scanner.Instance.Locations.ContainsKey("PLAYERINFO"))
            {
                return(result);
            }

            PlayerInfoMap = Scanner.Instance.Locations["PLAYERINFO"];

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

            try
            {
                var enmityEntries = new List <EnmityEntry>();

                if (Scanner.Instance.Locations.ContainsKey("AGROMAP") && Scanner.Instance.Locations.ContainsKey("AGRO_COUNT"))
                {
                    var enmityCount     = MemoryHandler.Instance.GetInt16(Scanner.Instance.Locations["AGRO_COUNT"]);
                    var enmityStructure = (IntPtr)Scanner.Instance.Locations["AGROMAP"];

                    if (enmityCount > 0 && enmityCount < 32 && enmityStructure.ToInt64() > 0)
                    {
                        for (uint i = 0; i < enmityCount; i++)
                        {
                            var address     = new IntPtr(enmityStructure.ToInt64() + i * 72);
                            var enmityEntry = new EnmityEntry
                            {
                                ID     = (uint)MemoryHandler.Instance.GetPlatformInt(address, MemoryHandler.Instance.Structures.EnmityEntry.ID),
                                Name   = MemoryHandler.Instance.GetString(address + MemoryHandler.Instance.Structures.EnmityEntry.Name),
                                Enmity = MemoryHandler.Instance.GetUInt32(address + MemoryHandler.Instance.Structures.EnmityEntry.Enmity)
                            };
                            if (enmityEntry.ID > 0)
                            {
                                enmityEntries.Add(enmityEntry);
                            }
                        }
                    }
                }

                var source = MemoryHandler.Instance.GetByteArray(PlayerInfoMap, 0x256);

                try
                {
                    result.PlayerEntity = PlayerEntityHelper.ResolvePlayerFromBytes(source);
                    result.PlayerEntity.EnmityEntries = enmityEntries;
                }
                catch (Exception ex)
                {
                    MemoryHandler.Instance.RaiseException(Logger, ex, true);
                }
            }
            catch (Exception ex)
            {
                MemoryHandler.Instance.RaiseException(Logger, ex, true);
            }

            return(result);
        }
Ejemplo n.º 3
0
        public static PlayerInfoReadResult GetPlayerInfo()
        {
            var result = new PlayerInfoReadResult();

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

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

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

            try
            {
                var agroEntries = new List <EnmityEntry>();

                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)
                    {
                        for (uint i = 0; i < agroCount; i++)
                        {
                            var address   = new IntPtr(agroStructure.ToInt64() + i * 72);
                            var agroEntry = new EnmityEntry
                            {
                                ID     = (uint)MemoryHandler.Instance.GetPlatformInt(address, MemoryHandler.Instance.Structures.EnmityEntry.ID),
                                Name   = MemoryHandler.Instance.GetString(address + MemoryHandler.Instance.Structures.EnmityEntry.Name),
                                Enmity = MemoryHandler.Instance.GetUInt32(address + MemoryHandler.Instance.Structures.EnmityEntry.Enmity)
                            };
                            if (agroEntry.ID > 0)
                            {
                                agroEntries.Add(agroEntry);
                            }
                        }
                    }
                }

                var source = MemoryHandler.Instance.GetByteArray(PlayerInfoMap, 0x256);

                try
                {
                    result.PlayerEntity = PlayerEntityHelper.ResolvePlayerFromBytes(source);
                    result.PlayerEntity.EnmityEntries = agroEntries;
                }
                catch (Exception ex)
                {
                    MemoryHandler.Instance.RaiseException(Logger, ex, true);
                }
            }
            catch (Exception ex)
            {
                MemoryHandler.Instance.RaiseException(Logger, ex, true);
            }

            return(result);
        }