public void ServerUse_Strike() { BasePlayer ownerPlayer = this.GetOwnerPlayer(); if (Object.op_Equality((Object)ownerPlayer, (Object)null)) { return; } Vector3 position = ownerPlayer.eyes.position; Vector3 vector3 = ownerPlayer.eyes.BodyForward(); for (int index1 = 0; index1 < 2; ++index1) { List <RaycastHit> list = (List <RaycastHit>)Pool.GetList <RaycastHit>(); GamePhysics.TraceAll(new Ray(Vector3.op_Subtraction(position, Vector3.op_Multiply(vector3, index1 == 0 ? 0.0f : 0.2f)), vector3), index1 == 0 ? 0.0f : this.attackRadius, list, this.effectiveRange + 0.2f, 1219701521, (QueryTriggerInteraction)0); bool flag = false; for (int index2 = 0; index2 < list.Count; ++index2) { RaycastHit hit = list[index2]; BaseEntity entity = hit.GetEntity(); if (!Object.op_Equality((Object)entity, (Object)null) && (!Object.op_Inequality((Object)entity, (Object)null) || !Object.op_Equality((Object)entity, (Object)ownerPlayer) && !entity.EqualNetID((BaseNetworkable)ownerPlayer)) && ((!Object.op_Inequality((Object)entity, (Object)null) || !entity.isClient) && !(entity.Categorize() == ownerPlayer.Categorize()))) { float num = 0.0f; foreach (DamageTypeEntry damageType in this.damageTypes) { num += damageType.amount; } entity.OnAttacked(new HitInfo((BaseEntity)ownerPlayer, entity, DamageType.Slash, num * this.npcDamageScale)); HitInfo info = (HitInfo)Pool.Get <HitInfo>(); info.HitPositionWorld = ((RaycastHit) ref hit).get_point(); info.HitNormalWorld = Vector3.op_UnaryNegation(vector3); info.HitMaterial = entity is BaseNpc || entity is BasePlayer?StringPool.Get("Flesh") : StringPool.Get(Object.op_Inequality((Object)hit.GetCollider().get_sharedMaterial(), (Object)null) ? hit.GetCollider().get_sharedMaterial().GetName() : "generic"); Effect.server.ImpactEffect(info); // ISSUE: cast to a reference type Pool.Free <HitInfo>((M0&)ref info); flag = true; if (!Object.op_Inequality((Object)entity, (Object)null) || entity.ShouldBlockProjectiles()) { break; } } } // ISSUE: cast to a reference type Pool.FreeList <RaycastHit>((List <M0>&) ref list); if (flag) { break; } } }
public void ServerUse_Strike() { BasePlayer ownerPlayer = base.GetOwnerPlayer(); if (ownerPlayer == null) { return; } Vector3 vector3 = ownerPlayer.eyes.position; Vector3 vector31 = ownerPlayer.eyes.BodyForward(); for (int i = 0; i < 2; i++) { List <RaycastHit> list = Facepunch.Pool.GetList <RaycastHit>(); GamePhysics.TraceAll(new Ray(vector3 - (vector31 * (i == 0 ? 0f : 0.2f)), vector31), (i == 0 ? 0f : this.attackRadius), list, this.effectiveRange + 0.2f, 1219701521, QueryTriggerInteraction.UseGlobal); bool flag = false; for (int j = 0; j < list.Count; j++) { RaycastHit item = list[j]; BaseEntity entity = item.GetEntity(); if (!(entity == null) && (!(entity != null) || !(entity == ownerPlayer) && !entity.EqualNetID(ownerPlayer)) && (!(entity != null) || !entity.isClient) && !(entity.Categorize() == ownerPlayer.Categorize())) { float single = 0f; foreach (DamageTypeEntry damageType in this.damageTypes) { single += damageType.amount; } entity.OnAttacked(new HitInfo(ownerPlayer, entity, DamageType.Slash, single * this.npcDamageScale)); HitInfo hitInfo = Facepunch.Pool.Get <HitInfo>(); hitInfo.HitPositionWorld = item.point; hitInfo.HitNormalWorld = -vector31; if (entity is BaseNpc || entity is BasePlayer) { hitInfo.HitMaterial = StringPool.Get("Flesh"); } else { hitInfo.HitMaterial = StringPool.Get((item.GetCollider().sharedMaterial != null ? item.GetCollider().sharedMaterial.GetName() : "generic")); } Effect.server.ImpactEffect(hitInfo); Facepunch.Pool.Free <HitInfo>(ref hitInfo); flag = true; if (!(entity != null) || entity.ShouldBlockProjectiles()) { break; } } } Facepunch.Pool.FreeList <RaycastHit>(ref list); if (flag) { break; } } }
public void ServerUse_Strike() { BasePlayer ownerPlayer = GetOwnerPlayer(); if (ownerPlayer == null) { return; } Vector3 position = ownerPlayer.eyes.position; Vector3 vector = ownerPlayer.eyes.BodyForward(); for (int i = 0; i < 2; i++) { List <RaycastHit> obj = Facepunch.Pool.GetList <RaycastHit>(); GamePhysics.TraceAll(new Ray(position - vector * ((i == 0) ? 0f : 0.2f), vector), (i == 0) ? 0f : attackRadius, obj, effectiveRange + 0.2f, 1219701521); bool flag = false; for (int j = 0; j < obj.Count; j++) { RaycastHit hit = obj[j]; BaseEntity entity = RaycastHitEx.GetEntity(hit); if (entity == null || (entity != null && (entity == ownerPlayer || entity.EqualNetID(ownerPlayer))) || (entity != null && entity.isClient) || entity.Categorize() == ownerPlayer.Categorize()) { continue; } float num = 0f; foreach (DamageTypeEntry damageType in damageTypes) { num += damageType.amount; } entity.OnAttacked(new HitInfo(ownerPlayer, entity, DamageType.Slash, num * npcDamageScale)); HitInfo obj2 = Facepunch.Pool.Get <HitInfo>(); obj2.HitEntity = entity; obj2.HitPositionWorld = hit.point; obj2.HitNormalWorld = -vector; if (entity is BaseNpc || entity is BasePlayer) { obj2.HitMaterial = StringPool.Get("Flesh"); } else { obj2.HitMaterial = StringPool.Get((RaycastHitEx.GetCollider(hit).sharedMaterial != null) ? AssetNameCache.GetName(RaycastHitEx.GetCollider(hit).sharedMaterial) : "generic"); } ServerUse_OnHit(obj2); Effect.server.ImpactEffect(obj2); Facepunch.Pool.Free(ref obj2); flag = true; if (!(entity != null) || entity.ShouldBlockProjectiles()) { break; } } Facepunch.Pool.FreeList(ref obj); if (flag) { break; } } }