private void FetchDangerRegions(object source = null, ElapsedEventArgs e = null) { lock (m_FetchDangerRegionsLock) { if (IsUpdating && DangerRegionsEnabled) { try { IEnumerable <ActorCommonData> objects = ActorCommonDataHelper.Enumerate(x => (x.x184_ActorType == ActorType.ServerProp || x.x184_ActorType == ActorType.Monster || x.x184_ActorType == ActorType.Projectile || x.x184_ActorType == ActorType.CustomBrain) && DANGERS.Exists(d => x.x004_Name.Contains(d.name))); HashSet <region_data> dangers = new HashSet <region_data>(); foreach (ActorCommonData obj in objects) { danger_data data = DANGERS.Find(d => obj.x004_Name.Contains(d.name)); if (data != null) { Vec3 pos = new Vec3(obj.x0D0_WorldPosX, obj.x0D4_WorldPosY, obj.x0D8_WorldPosZ); AABB area = new AABB(pos - new Vec3(data.range, data.range, pos.Z - 100), pos + new Vec3(data.range, data.range, pos.Z + 100)); dangers.Add(new region_data(area, data.move_cost_mult)); } } Regions = dangers; } catch (Exception) { } } m_FetchDangerRegionsTimer.Start(); } }
//private static readonly List<danger_data> DANGERS = new List<danger_data>() { new danger_data("sporeCloud_emitter", 15, 3), // new danger_data("ChargedBolt_Projectile", 7, 3), // new danger_data("monsterAffix_Desecrator_damage_AOE", 10, 3), // new danger_data("monsterAffix_Plagued", 15, 3), // new danger_data("monsterAffix_Molten_trail", 7, 3), // new danger_data("monsterAffix_Molten_death", 20, 3), // new danger_data("arcaneEnchantedDummy_spawn", 35, 3), // new danger_data("MonsterAffix_ArcaneEnchanted_PetSweep", 35, 3), // new danger_data("monsterAffix_frozen_iceClusters", 20, 3), // new danger_data("MonsterAffix_Orbiter", 7, 3), // new danger_data("MonsterAffix_frozenPulse", 15, 3), // new danger_data("MonsterAffix_CorpseBomber", 15, 3), // new danger_data("MorluSpellcaster_Meteor_Pending", 25, 3), // new danger_data("_Generic_AOE_", 25, 3), // new danger_data("ZoltunKulle_EnergyTwister", 20, 3), // new danger_data("Gluttony_gasCloud", 25, 3), // new danger_data("UberMaghda_Punish_", 20, 3), // new danger_data("Random_FallingRocks", 40, 3), // new danger_data("ringofFire_damageArea", 35, 3), // new danger_data("BoneCage_Proxy", 20, 3), // new danger_data("Brute_leap_telegraph", 20, 3), // new danger_data("creepMobArm", 20, 3), // new danger_data("Morlu_GroundBomb", 40, 3), // new danger_data("grenadier_proj_trail", 40, 3), // new danger_data("orbOfAnnihilation", 40, 3), // //new danger_data("westmarchRanged_projectile", 15, 1.5f), // new danger_data("Corpulent_A", 25, 3) }; private void FetchDangerRegions(object source = null, ElapsedEventArgs e = null) { if (DangerRegionsEnabled && IsPlayerReady()) { try { HashSet <region_data> dangers = new HashSet <region_data>(); IEnumerable <ACD> objects = m_MemoryContext.DataSegment.ObjectManager.ACDManager.ActorCommonData.Where(x => (x.ActorType == ActorType.ServerProp || x.ActorType == ActorType.Monster || x.ActorType == ActorType.Projectile || x.ActorType == ActorType.CustomBrain) && DANGERS.ContainsKey(x.ActorSNO)); foreach (ACD obj in objects) { danger_data data = DANGERS[obj.ActorSNO]; if (data != null) { Vec3 pos = new Vec3(obj.Position.X, obj.Position.Y, obj.Position.Z); AABB area = new AABB(pos - new Vec3(data.range, data.range, pos.Z - 100), pos + new Vec3(data.range, data.range, pos.Z + 100)); dangers.Add(new region_data(area, data.move_cost_mult)); } } //IEnumerable<ACD> objects = m_MemoryContext.DataSegment.ObjectManager.ACDManager.ActorCommonData.Where(x => x.ActorType == ActorType.Monster && x.TeamID == 10 && x.Hitpoints > 0); //foreach (ACD obj in objects) //{ // float radius = obj.Radius; // Vec3 pos = new Vec3(obj.Position.X, obj.Position.Y, obj.Position.Z); // AABB area = new AABB(pos - new Vec3(radius, radius, pos.Z - 100), pos + new Vec3(radius, radius, pos.Z + 100)); // dangers.Add(new region_data(area, 1.5f)); //} Regions = dangers; } catch (Exception) { } } }