public void ForceUpdate() { DamageTypeList armorValues; HumanBodyTakeDamage damage; if (RPOS.GetObservedPlayerComponent <HumanBodyTakeDamage>(out damage)) { armorValues = damage.GetArmorValues(); } else { armorValues = new DamageTypeList(); } this.leftText.text = string.Empty; this.rightText.text = string.Empty; for (int i = 0; i < 6; i++) { if (armorValues[i] != 0f) { this.leftText.text = this.leftText.text + TakeDamage.DamageIndexToString((DamageTypeIndex)i) + "\n"; string text = this.rightText.text; object[] objArray1 = new object[] { text, "+", (int)armorValues[i], "\n" }; this.rightText.text = string.Concat(objArray1); } } }
public void CalculateArmor() { IInventoryItem inventoryItem; InventoryHolder inventoryHolder = this.inventoryHolder; ProtectionTakeDamage protectionTakeDamage = this.takeDamage; if (inventoryHolder && protectionTakeDamage) { DamageTypeList damageTypeList = new DamageTypeList(); for (int i = 36; i < 40; i++) { if (inventoryHolder.inventory.GetItem(i, out inventoryItem)) { ArmorDataBlock armorDataBlock = inventoryItem.datablock as ArmorDataBlock; ArmorDataBlock armorDataBlock1 = armorDataBlock; if (armorDataBlock) { armorDataBlock1.AddToDamageTypeList(damageTypeList); } } } if (protectionTakeDamage) { protectionTakeDamage.SetArmorValues(damageTypeList); } } }
public DamageTypeList(DamageTypeList copyFrom) : this() { if (copyFrom == null || copyFrom.damageArray == null) { this.damageArray = new float[6]; } else if ((int)copyFrom.damageArray.Length != 6) { this.damageArray = new float[6]; if ((int)copyFrom.damageArray.Length <= 6) { for (int i = 0; i < (int)copyFrom.damageArray.Length; i++) { this.damageArray[i] = copyFrom.damageArray[i]; } } else { for (int j = 0; j < 6; j++) { this.damageArray[j] = copyFrom.damageArray[j]; } } } else { this.damageArray = (float[])copyFrom.damageArray.Clone(); } }
public static void ApplyDamageTypeList(TakeDamage takeDamage, ref DamageEvent damage, DamageTypeList damageType) { ProtectionTakeDamage damage2 = takeDamage as ProtectionTakeDamage; string str = damage.victim.idMain.name.Replace("(Clone)", ""); for (int i = 0; i < 6; i++) { DamageTypeFlags flags = (DamageTypeFlags)(((int)1) << i); float result = (damage2 != null) ? damage2.GetArmorValue(i) : 0f; string key = str + "." + flags.ToString().Replace("damage_", ""); if (!(damage.victim.idMain is Character)) { Config.Get("OVERRIDE.ARMOR", key, ref result, true); } if ((result > 0f) && (damageType[i] > 0f)) { DamageTypeList list; int num3; (list = damageType)[num3 = i] = list[num3] * Mathf.Clamp01(1f - (result / 200f)); } if (!Mathf.Approximately(damageType[i], 0f)) { damage.damageTypes |= flags; damage.amount += damageType[i]; } } }
public void Scale(DamageTypeList damageList, float ProtectionAmount = 1f) { for (int index = 0; index < this.amounts.Length; ++index) { if ((double)this.amounts[index] != 0.0) { damageList.Scale((DamageType)index, (float)(1.0 - (double)this.amounts[index] * (double)ProtectionAmount)); } } }
///////////////////////////////////////// // OnServerInitialized() // Called when the server is initialized ///////////////////////////////////////// void OnServerInitialized() { allZoneFields = typeof(ZoneDefinition).GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic); emptyDamageType = new DamageTypeList(); emptyDamageList = new List <DamageTypeEntry>(); foreach (KeyValuePair <string, ZoneDefinition> pair in zonedefinitions) { NewZone(pair.Value); } }
public void AddToDamageTypeList(DamageTypeList damageList) { for (int i = 0; i < 6; i++) { DamageTypeList list; int num2; float num3 = list[num2]; (list = damageList)[num2 = i] = num3 + this.armorValues[i]; } }
protected virtual void ApplyDamageTypeList(ref DamageEvent damage, DamageTypeList damageTypes) { for (int i = 0; i < 6; i++) { if (!Mathf.Approximately(damageTypes[i], 0f)) { damage.damageTypes = (DamageTypeFlags)((int)damage.damageTypes | 1 << (i & 31)); damage.amount = damage.amount + damageTypes[i]; } } }
private void WriteDamageTypes(DamageTypeList damageInfo) { Dictionary <DamageType, float> damages = new Dictionary <DamageType, float>(); for (int i = 0; i < (int)DamageType.LAST; ++i) { damages.Add((DamageType)i, damageInfo.types[i]); } Debug.Log(String.Join("\n", damages.Select(d => d.Key.ToString() + ": " + d.Value).ToArray())); }
protected virtual void ApplyDamageTypeList(ref DamageEvent damage, DamageTypeList damageTypes) { for (int i = 0; i < 6; i++) { if (!Mathf.Approximately(damageTypes[i], 0f)) { damage.damageTypes |= ((int)1) << i; damage.amount += damageTypes[i]; } } }
public void AddToDamageTypeList(DamageTypeList damageList) { for (int i = 0; i < 6; i++) { DamageTypeList item = damageList; DamageTypeList damageTypeList = item; int num = i; float single = damageTypeList[num]; item[num] = single + this.armorValues[i]; } }
public virtual void SetArmorValues(DamageTypeList armor) { if (this.initializedArmor) { this._armorValues.SetArmorValues(armor); } else { this._armorValues = new DamageTypeList(armor); this.initializedArmor = true; } }
protected sealed override void ApplyDamageTypeList(ref DamageEvent damage, DamageTypeList damageTypes) { for (int i = 0; i < 6; i++) { if ((this._armorValues[i] > 0f) && (damageTypes[i] > 0f)) { DamageTypeList list; int num2; float num3 = list[num2]; (list = damageTypes)[num2 = i] = num3 * Mathf.Clamp01(1f - (this._armorValues[i] / 200f)); } } base.ApplyDamageTypeList(ref damage, damageTypes); }
protected sealed override void ApplyDamageTypeList(ref DamageEvent damage, DamageTypeList damageTypes) { for (int i = 0; i < 6; i++) { if (this._armorValues[i] > 0f && damageTypes[i] > 0f) { DamageTypeList damageTypeList = damageTypes; DamageTypeList damageTypeList1 = damageTypeList; int num = i; float item = damageTypeList1[num]; damageTypeList[num] = item * Mathf.Clamp01(1f - this._armorValues[i] / 200f); } } base.ApplyDamageTypeList(ref damage, damageTypes); }
protected void ArmorData(byte[] data) { DamageTypeList armor = new DamageTypeList(); BitStream stream = new BitStream(data, false); for (int i = 0; i < 6; i++) { armor[i] = stream.ReadSingle(); } ProtectionTakeDamage takeDamage = this.takeDamage; if (takeDamage != null) { takeDamage.SetArmorValues(armor); } if (base.localPlayerControlled) { RPOS.SetEquipmentDirty(); } }
protected void ArmorData(byte[] data) { DamageTypeList damageTypeList = new DamageTypeList(); uLink.BitStream bitStream = new uLink.BitStream(data, false); for (int i = 0; i < 6; i++) { damageTypeList[i] = bitStream.ReadSingle(); } ProtectionTakeDamage protectionTakeDamage = this.takeDamage; if (protectionTakeDamage) { protectionTakeDamage.SetArmorValues(damageTypeList); } if (base.localPlayerControlled) { RPOS.SetEquipmentDirty(); } }
public void CalculateArmor() { InventoryHolder inventoryHolder = this.inventoryHolder; ProtectionTakeDamage takeDamage = this.takeDamage; if ((inventoryHolder != null) && (takeDamage != null)) { DamageTypeList damageList = new DamageTypeList(); for (int i = 0x24; i < 40; i++) { ArmorDataBlock block; IInventoryItem item; if (inventoryHolder.inventory.GetItem(i, out item) && ((block = item.datablock as ArmorDataBlock) != null)) { block.AddToDamageTypeList(damageList); } } if (takeDamage != null) { takeDamage.SetArmorValues(damageList); } } }
private Quantity(TakeDamage.Unit Measurement, DamageTypeList DamageTypeList, float Value) { this.Unit = Measurement; this.list = DamageTypeList; this.@value = Value; }
public void SetArmorValues(DamageTypeList copyFrom) { int j; if (this.damageArray != null && (int)this.damageArray.Length == 6) { if (copyFrom.damageArray == null) { if (this.damageArray == null || (int)this.damageArray.Length != 6) { this.damageArray = new float[6]; } else { for (int i = 0; i < 6; i++) { this.damageArray[i] = 0f; } } } else if ((int)copyFrom.damageArray.Length < 6) { for (j = 0; j < (int)copyFrom.damageArray.Length; j++) { this.damageArray[j] = copyFrom.damageArray[j]; } while (j < 6) { int num = j; j = num + 1; this.damageArray[num] = 0f; } } else { for (int k = 0; k < 6; k++) { this.damageArray[k] = copyFrom.damageArray[k]; } } } else if (copyFrom == null || copyFrom.damageArray == null) { this.damageArray = new float[6]; } else if ((int)copyFrom.damageArray.Length != 6) { this.damageArray = new float[6]; if ((int)copyFrom.damageArray.Length <= 6) { for (int l = 0; l < (int)copyFrom.damageArray.Length; l++) { this.damageArray[l] = copyFrom.damageArray[l]; } } else { for (int m = 0; m < 6; m++) { this.damageArray[m] = copyFrom.damageArray[m]; } } } else { this.damageArray = (float[])copyFrom.damageArray.Clone(); } }
///////////////////////////////////////// // OnServerInitialized() // Called when the server is initialized ///////////////////////////////////////// void OnServerInitialized() { allZoneFields = typeof(ZoneDefinition).GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic); emptyDamageType = new DamageTypeList(); emptyDamageList = new List<DamageTypeEntry>(); foreach (KeyValuePair<string, ZoneDefinition> pair in zonedefinitions) { NewZone(pair.Value); } }
private void None_Click(object sender, RoutedEventArgs e) { DamageTypeList.UnselectAll(); }
private void All_Click(object sender, RoutedEventArgs e) { DamageTypeList.SelectAll(); }
private void InitializeArmorValues() { this._armorValues = new DamageTypeList(this._startArmorValues); this.initializedArmor = true; }
void Loaded() { emptyDamageType = new DamageTypeList(); serverinput = typeof(BasePlayer).GetField("serverInput", (BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic)); LoadData(); }
public static bool DamageOverride(TakeDamage take, ref DamageEvent damage, ref TakeDamage.Quantity quantity) { if (damage.attacker.idMain != damage.victim.idMain) { if (!Core.OverrideDamage || float.IsInfinity(damage.amount)) { return(true); } if ((damage.victim.id.GetComponent <Character>() == null) && (damage.attacker.client != null)) { ulong ownerID = (damage.victim.client != null) ? damage.victim.client.userID : ((ulong)0L); if (damage.victim.idMain is DeployableObject) { ownerID = (damage.victim.idMain as DeployableObject).ownerID; } if (damage.victim.idMain is StructureComponent) { ownerID = (damage.victim.idMain as StructureComponent)._master.ownerID; } ulong num2 = (damage.attacker.client != null) ? damage.attacker.client.userID : ((ulong)0L); if (damage.attacker.idMain is DeployableObject) { num2 = (damage.attacker.idMain as DeployableObject).ownerID; } if (damage.attacker.idMain is StructureComponent) { num2 = (damage.attacker.idMain as StructureComponent)._master.ownerID; } if (((ownerID == num2) || Users.SharedGet(ownerID, num2)) && (Core.OwnershipDestroy || Core.DestoryOwnership.ContainsKey(damage.attacker.client.userID))) { Config.Get("OVERRIDE.DAMAGE", damage.attacker.idMain.name.Replace("(Clone)", "") + ".DAMAGE", ref damage.amount, true); return(true); } } bool result = true; if ((damage.attacker.client != null) && (damage.attacker.idMain is Character)) { WeaponImpact extraData = damage.extraData as WeaponImpact; string str = (extraData != null) ? extraData.dataBlock.name : "Hunting Bow"; string str2 = str.Replace(" ", "") + ".DAMAGE"; string key = str2 + "." + damage.victim.idMain.name.Replace("(Clone)", ""); string str4 = str2 + ".HEADSHOT"; if (Config.Get("OVERRIDE.DAMAGE", key, ref result, true) && !result) { return(false); } float[] numArray = (extraData != null) ? new float[] { extraData.dataBlock.damageMin, extraData.dataBlock.damageMax } : new float[] { 75f, 75f }; Config.Get("OVERRIDE.DAMAGE", (damage.bodyPart == BodyPart.Head) ? str4 : str2, ref numArray, true); damage.amount = UnityEngine.Random.Range(Math.Min(numArray[0], numArray[1]), Math.Max(numArray[0], numArray[1])); if ((extraData != null) && (damage.extraData is BulletWeaponDataBlock)) { damage.amount *= (damage.extraData as BulletWeaponDataBlock).IsSilenced(extraData.itemRep) ? 0.8f : 1f; } if ((extraData != null) && (damage.extraData is BulletWeaponImpact)) { quantity = new DamageTypeList(0f, damage.amount, 0f, 0f, 0f, 0f); } else { quantity = new DamageTypeList(0f, 0f, damage.amount, 0f, 0f, 0f); } damage.amount = 0f; if (quantity.Unit == TakeDamage.Unit.List) { ApplyDamageTypeList(take, ref damage, quantity.DamageTypeList); } Helper.Log(string.Concat(new object[] { "Damage: ", damage.attacker.idMain, "[", damage.attacker.networkViewID, "] from ", str, " hit ", damage.victim.idMain, "[", damage.victim.networkViewID, "] on ", damage.amount, "(", numArray[0], "-", numArray[1], ") pts." }), false); } else if (!(damage.attacker.idMain is Character)) { float baseReturnDmg = 0f; float explosionRadius = 0f; if (damage.attacker.id is TimedGrenade) { baseReturnDmg = (damage.attacker.id as TimedGrenade).damage; explosionRadius = (damage.attacker.id as TimedGrenade).explosionRadius; } if (damage.attacker.id is TimedExplosive) { baseReturnDmg = (damage.attacker.id as TimedExplosive).damage; explosionRadius = (damage.attacker.id as TimedExplosive).explosionRadius; } if (damage.attacker.id is SpikeWall) { baseReturnDmg = (damage.attacker.id as SpikeWall).baseReturnDmg; explosionRadius = 0f; } if (baseReturnDmg > 0f) { string str5 = damage.attacker.idMain.name.Replace("(Clone)", "") + ".DAMAGE"; string str6 = str5 + "." + damage.victim.idMain.name.Replace("(Clone)", ""); if (Config.Get("OVERRIDE.DAMAGE", str6, ref result, true) && !result) { return(false); } Config.Get("OVERRIDE.DAMAGE", str5, ref baseReturnDmg, true); if (explosionRadius > 0f) { RaycastHit hit; bool flag2; MeshBatchInstance instance; Vector3 center = damage.victim.idMain.collider.bounds.center; Vector3 a = damage.attacker.idMain.collider.bounds.center; Vector3 direction = center - a; float distance = Vector3.Distance(a, center); if (Facepunch.MeshBatch.MeshBatchPhysics.Raycast(a, direction, out hit, distance, 0x10360401, out flag2, out instance)) { IDMain main = flag2 ? instance.idMain : IDBase.GetMain(hit.collider); GameObject obj2 = (main != null) ? main.gameObject : hit.collider.gameObject; if (obj2 != damage.victim.idMain.gameObject) { damage.amount = (1f - Mathf.Clamp01(distance / explosionRadius)) * baseReturnDmg; if (flag2) { damage.amount *= 0.1f; } } } } if (damage.attacker.id is SpikeWall) { quantity = new DamageTypeList(0f, 0f, damage.amount, 0f, 0f, 0f); } else { quantity = new DamageTypeList(0f, 0f, 0f, damage.amount, 0f, 0f); } damage.amount = 0f; if (quantity.Unit == TakeDamage.Unit.List) { ApplyDamageTypeList(take, ref damage, quantity.DamageTypeList); } } Helper.Log(string.Concat(new object[] { "Damage: ", damage.attacker.idMain, "[", damage.attacker.networkViewID, "] owned ", damage.attacker.client, " hit ", damage.victim.idMain, "[", damage.victim.networkViewID, "] on ", damage.amount, "(", baseReturnDmg, ") pts." }), false); } } return(true); }
public void SetArmorValues(DamageTypeList copyFrom) { if ((this.damageArray == null) || (this.damageArray.Length != 6)) { if ((copyFrom == null) || (copyFrom.damageArray == null)) { this.damageArray = new float[6]; } else if (copyFrom.damageArray.Length == 6) { this.damageArray = (float[])copyFrom.damageArray.Clone(); } else { this.damageArray = new float[6]; if (copyFrom.damageArray.Length > 6) { for (int i = 0; i < 6; i++) { this.damageArray[i] = copyFrom.damageArray[i]; } } else { for (int j = 0; j < copyFrom.damageArray.Length; j++) { this.damageArray[j] = copyFrom.damageArray[j]; } } } } else if (copyFrom.damageArray == null) { if ((this.damageArray == null) || (this.damageArray.Length != 6)) { this.damageArray = new float[6]; } else { for (int k = 0; k < 6; k++) { this.damageArray[k] = 0f; } } } else if (copyFrom.damageArray.Length >= 6) { for (int m = 0; m < 6; m++) { this.damageArray[m] = copyFrom.damageArray[m]; } } else { int index = 0; while (index < copyFrom.damageArray.Length) { this.damageArray[index] = copyFrom.damageArray[index]; index++; } while (index < 6) { this.damageArray[index++] = 0f; } } }