コード例 #1
0
        public static ActorCommonData GetTarget()
        {
            ActorCommonData acdTarget = null;

            var queryMonster = ActorCommonDataHelper.EnumerateMonsters().Where(x => x.x0D0_WorldPosX > 0 && x.x188_Hitpoints > 00001 && x.x190_TeamId == 10 && x.x184_ActorType == Enigma.D3.Enums.ActorType.Monster && !x.x004_Name.Contains("sandWasp"));

            var queryMonsterQuality = queryMonster
                                      .Where(x => x.x0B8_MonsterQuality > Enigma.D3.Enums.MonsterQuality.Normal)
                                      .OrderBy(x => x.x0B8_MonsterQuality);

            if (queryMonsterQuality.Any())
            {
                var acd = queryMonsterQuality.First();
                WindowHook.SetD3WindowText(string.Format("Target {0} x098_MonsterSnoId:{1}", acd.x004_Name, acd.x098_MonsterSnoId));
                return(acd);
            }


            var queryMonsterLeft = queryMonster
                                   .OrderBy(x => x.x188_Hitpoints);

            if (queryMonsterLeft.Any())
            {
                var acd = queryMonsterLeft.First();
                WindowHook.SetD3WindowText(string.Format("Target {0} x098_MonsterSnoId:{1}", acd.x004_Name, acd.x184_ActorType == Enigma.D3.Enums.ActorType.Monster));
                return(acd);
            }

            WindowHook.SetD3WindowText("Target NULL");
            return(acdTarget);
        }
コード例 #2
0
ファイル: Core.cs プロジェクト: rol2728/Dev.D3
        //private static bool IsValidMonster(ActorCommonData acd)
        //{
        //    return acd.x188_Hitpoints > 0.00001 && // seems to be lower limit for what D3 considers dead
        //        (acd.x194_Flags_Is_Trail_Proxy_Etc & 1) == 0 && // this removes most weird actors
        //        acd.x190_TeamId == 10; // = hostile
        //}

        public void GetAllMonsters()
        {
            var engine = Engine.Create();
            var acds   = new ActorCommonData[0];
            var pt     = System.Diagnostics.Stopwatch.StartNew();

            for (int i = 0; i < 1000; i++)
            {
                acds = ActorCommonDataHelper.EnumerateMonsters().ToArray();
            }
            pt.Stop();
            Console.WriteLine("Getting all monster ACDs 1000 times took " + pt.Elapsed.TotalMilliseconds.ToString("0.00") + "ms");
            Console.WriteLine("Max update frequency: " + (1000d / (pt.Elapsed.TotalMilliseconds / 1000)).ToString("0") + "Hz");
            Console.WriteLine("Number of ACDs: " + ActorCommonDataHelper.Enumerate(a => true).Count());
            Console.ReadLine();
        }