public void DoRadialDamage() { List <Collider> list = (List <Collider>)Pool.GetList <Collider>(); Vector3 position = Vector3.op_Addition(((Component)this).get_transform().get_position(), new Vector3(0.0f, this.radius * 0.75f, 0.0f)); Vis.Colliders <Collider>(position, this.radius, list, LayerMask.op_Implicit(this.AttackLayers), (QueryTriggerInteraction)2); HitInfo info = new HitInfo(); info.DoHitEffects = true; info.DidHit = true; info.HitBone = 0U; info.Initiator = Object.op_Equality((Object)this.creatorEntity, (Object)null) ? ((Component)this).get_gameObject().ToBaseEntity() : this.creatorEntity; info.PointStart = ((Component)this).get_transform().get_position(); using (List <Collider> .Enumerator enumerator = list.GetEnumerator()) { while (enumerator.MoveNext()) { Collider current = enumerator.Current; if (!current.get_isTrigger() || ((Component)current).get_gameObject().get_layer() != 29 && ((Component)current).get_gameObject().get_layer() != 18) { BaseCombatEntity baseEntity = ((Component)current).get_gameObject().ToBaseEntity() as BaseCombatEntity; if (!Object.op_Equality((Object)baseEntity, (Object)null) && baseEntity.isServer && (baseEntity.IsAlive() && baseEntity.IsVisible(position, float.PositiveInfinity))) { if (baseEntity is BasePlayer) { Effect.server.Run("assets/bundled/prefabs/fx/impacts/additive/fire.prefab", (BaseEntity)baseEntity, 0U, new Vector3(0.0f, 1f, 0.0f), Vector3.get_up(), (Connection)null, false); } info.PointEnd = ((Component)baseEntity).get_transform().get_position(); info.HitPositionWorld = ((Component)baseEntity).get_transform().get_position(); info.damageTypes.Set(DamageType.Heat, this.damagePerSecond * this.tickRate); baseEntity.OnAttacked(info); } } } } // ISSUE: cast to a reference type Pool.FreeList <Collider>((List <M0>&) ref list); }
public void DoRadialDamage() { List <Collider> list = Pool.GetList <Collider>(); Vector3 vector3 = base.transform.position + new Vector3(0f, this.radius * 0.75f, 0f); Vis.Colliders <Collider>(vector3, this.radius, list, this.AttackLayers, QueryTriggerInteraction.Collide); HitInfo hitInfo = new HitInfo() { DoHitEffects = true, DidHit = true, HitBone = 0, Initiator = (this.creatorEntity == null ? base.gameObject.ToBaseEntity() : this.creatorEntity), PointStart = base.transform.position }; foreach (Collider collider in list) { if (collider.isTrigger && (collider.gameObject.layer == 29 || collider.gameObject.layer == 18)) { continue; } BaseCombatEntity baseEntity = collider.gameObject.ToBaseEntity() as BaseCombatEntity; if (baseEntity == null || !baseEntity.isServer || !baseEntity.IsAlive() || !baseEntity.IsVisible(vector3, Single.PositiveInfinity)) { continue; } if (baseEntity is BasePlayer) { Effect.server.Run("assets/bundled/prefabs/fx/impacts/additive/fire.prefab", baseEntity, 0, new Vector3(0f, 1f, 0f), Vector3.up, null, false); } hitInfo.PointEnd = baseEntity.transform.position; hitInfo.HitPositionWorld = baseEntity.transform.position; hitInfo.damageTypes.Set(DamageType.Heat, this.damagePerSecond * this.tickRate); baseEntity.OnAttacked(hitInfo); } Pool.FreeList <Collider>(ref list); }
public void DoRadialDamage() { List <Collider> obj = Pool.GetList <Collider>(); Vector3 position = base.transform.position + new Vector3(0f, radius * 0.75f, 0f); Vis.Colliders(position, radius, obj, AttackLayers); HitInfo hitInfo = new HitInfo(); hitInfo.DoHitEffects = true; hitInfo.DidHit = true; hitInfo.HitBone = 0u; hitInfo.Initiator = ((creatorEntity == null) ? GameObjectEx.ToBaseEntity(base.gameObject) : creatorEntity); hitInfo.PointStart = base.transform.position; foreach (Collider item in obj) { if (item.isTrigger && (item.gameObject.layer == 29 || item.gameObject.layer == 18)) { continue; } BaseCombatEntity baseCombatEntity = GameObjectEx.ToBaseEntity(item.gameObject) as BaseCombatEntity; if (!(baseCombatEntity == null) && baseCombatEntity.isServer && baseCombatEntity.IsAlive() && (!ignoreNPC || !baseCombatEntity.IsNpc) && baseCombatEntity.IsVisible(position)) { if (baseCombatEntity is BasePlayer) { Effect.server.Run("assets/bundled/prefabs/fx/impacts/additive/fire.prefab", baseCombatEntity, 0u, new Vector3(0f, 1f, 0f), Vector3.up); } hitInfo.PointEnd = baseCombatEntity.transform.position; hitInfo.HitPositionWorld = baseCombatEntity.transform.position; hitInfo.damageTypes.Set(DamageType.Heat, damagePerSecond * tickRate); Interface.CallHook("OnFireBallDamage", this, baseCombatEntity, hitInfo); baseCombatEntity.OnAttacked(hitInfo); } } Pool.FreeList(ref obj); }